一 相關(guān)知識(shí) 1)默認(rèn)地,標(biāo)準(zhǔn)的輸入為鍵盤(pán),但是也可以來(lái)自文件或管道(pipe |)。 2)默認(rèn)地,標(biāo)準(zhǔn)的輸出為終端(terminal),但是也可以重定向到文件,管道或后引號(hào)(backquotes `)。 3) 默認(rèn)地,標(biāo)準(zhǔn)的錯(cuò)誤輸出到終端,但是也可以重定向到文件。 4)標(biāo)準(zhǔn)的輸入,輸出和錯(cuò)誤輸出分別表示為STDIN,STDOUT,STDERR,也可以用0,1,2來(lái)表示。 5)其實(shí)除了以上常用的3中文件描述符,還有3~9也可以作為文件描述符。3~9你可以認(rèn)為是執(zhí)行某個(gè)地方的文件描述符,常被用來(lái)作為臨時(shí)的中間描述符。 二 實(shí)例 1)command 2>errfile : command的錯(cuò)誤重定向到文件errfile。 2)command 2>&1 | ...: command的錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出,錯(cuò)誤和標(biāo)準(zhǔn)輸出都通過(guò)管道傳給下個(gè)命令。 3)var=`command 2>&1`: command的錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出,錯(cuò)誤和標(biāo)準(zhǔn)輸出都賦值給var。 4)command 3>&2 2>&1 1>&3 | ...:實(shí)現(xiàn)標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的交換。 5)var=`command 3>&2 2>&1 1>&3`:實(shí)現(xiàn)標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的交換。 6)command 2>&1 1>&2 | ...???? (wrong...) :這個(gè)不能實(shí)現(xiàn)標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的交換。因?yàn)閟hell從左到右執(zhí)行命令,當(dāng)執(zhí)行完2>&1后,錯(cuò)誤輸出已經(jīng)和標(biāo)準(zhǔn)輸出一樣的,再執(zhí)行1>&2也沒(méi)有意義。 三 "2>&1 file"和 "> file 2>&1"區(qū)別 1)cat food 2>&1 >file :錯(cuò)誤輸出到終端,標(biāo)準(zhǔn)輸出被重定向到文件file。 2)cat food >file 2>&1 :標(biāo)準(zhǔn)輸出被重定向到文件file,然后錯(cuò)誤輸出也重定向到和標(biāo)準(zhǔn)輸出一樣,所以也錯(cuò)誤輸出到文件file。 四 注意 通常打開(kāi)的文件在進(jìn)程推出的時(shí)候自動(dòng)的關(guān)閉,但是更好的辦法是當(dāng)你使用完以后立即關(guān)閉。用m<&-來(lái)關(guān)閉輸入文件描述符m,用m>&-來(lái)關(guān)閉輸出文件描述符m。如果你需要關(guān)閉標(biāo)準(zhǔn)輸入用<&-; >&- 被用來(lái)關(guān)閉標(biāo)準(zhǔn)輸出。 五 同時(shí)輸出到終端和文件 copy source dest | tee.exe copyerror.txt
發(fā)表評(píng)論