I/O重新導向詳解及應用執行個體
1、基本概念(這是理解後面的知識的前提,請務必理解)
a、I/O重新導向通常與 FD有關,shell的FD通常為10個,即 0~9;
b、常用FD有3個,為0(stdin,標準輸入)、1(stdout,標準輸出)、2(stderr,標準錯誤輸出),預設與keyboard、monitor、monitor有關;
c、用 < 來改變讀進的資料通道(stdin),使之從指定的檔案讀進;
d、用 > 來改變送出的資料通道(stdout, stderr),使之輸出到指定的檔案;
e、0 是 <的預設值,因此 < 與 0<是一樣的;同理,> 與 1> 是一樣的;
f、在IO重新導向中,stdout 與 stderr的管道會先準備好,才會從 stdin 讀進資料;
g、管道“|”(pipe line):上一個命令的stdout 接到下一個命令的stdin;
h、tee命令是在不影響原本 I/O的情況下,將stdout 複製一份到檔案去;
i、bash(ksh)執行命令的過程:分析命令-變數求值-命令替代(``和$( ))-重新導向-萬用字元展開-確定路徑-執行命令;
j、( )將command group置於sub-shell去執行,也稱nested sub-shell,它有一點非常重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。
k、exec命令:常用來替代當前shell並重新啟動一個 shell,換句話說,並沒有啟動子 shell。使用這一命令時任何現有環境都將會被清除。exec在對檔案描述符進行操作的時候,也只有在這時,exec 不會覆蓋你當前的shell 環境。
2、基本IO
cmd > file把stdout重新導向到file檔案中;
cmd >> file把stdout重新導向到file檔案中(追加);
cmd 1> fiel把stdout重新導向到file檔案中;
cmd > file 2>&1把stdout和stderr 一起重新導向到file檔案中;
cmd 2> file把stderr重新導向到file檔案中;
cmd 2>> file把stderr重新導向到file檔案中(追加);
cmd >> file 2>&1把stderr和stderr 一起重新導向到file檔案中(追加);
cmd < file >file2 cmd命令以 file檔案作為stdin,以 file2檔案作為stdout;
cat <>file 以讀寫的方式開啟 file;
cmd < file cmd命令以 file檔案作為stdin;
cmd << delimiter Here document,從 stdin中讀入,直至遇到delimiter 分界符。