65、shell,輸入輸出重新導向

來源:互聯網
上載者:User

1、重新導向相關檔案描述符

1)檔案描述符

① 0 標準輸入,/dev/stdin -> /proc/self/fd/0

② 1 標準輸出,/dev/stdout -> /proc/self/fd/1

③ 2 標準錯誤輸出,/dev/stderr -> /proc/self/fd/2

2)重新導向

① > 是1>的簡寫

② < 是0<的簡寫

③ > 將命令輸出寫入到檔案或裝置(例如印表機)中,而不是寫在命令提示字元視窗中。

④ >> 將命令輸出添加到檔案末尾而不刪除檔案中的資訊。

⑤ >& 將一個控制代碼的輸出寫入到另一個控制代碼的輸入中。

    2>&1聲明檔案描述符2為檔案描述符1的副本(嚴格的說是通過複製檔案描述符 1 來建立檔案描述符 2 ,但效果通常是合并了兩個流)。

3)其它

① >>file 將 STDOUT字串追加到檔案內容之後

② >file將 STDOUT重新導向到新檔案,當設定 $noclobber 時,可重寫檔案

③ >&file將STDOUT及STDERR(/dev/stdout)重新導向到檔案(command >& file)

④ >>&將 STDOUT及STDERR(/dev/stderr) 字串追加到檔案內容之後(command >>& file)

⑤ [n]>&-關閉 STDOUT或檔案描述符n(command >&-)

2、注意

1)shell遇到”>”操作符,會判斷右邊檔案是否存在,如存在就先刪除,且建立新檔案;不存在直接建立。無論左邊命令執行是否成功,右邊檔案都會變為空白。

2)“>>”操作符,判斷右邊檔案,如果不存在,先建立。以添加方式開啟檔案,會分配一個檔案描述符[不特別指定,預設為1,2]然後,與左邊的標準輸出或錯誤輸出綁定。

3)當命令執行完,繫結檔案的描述符也自動失效,0,1,2又會空閑。

4)命令在執行前,先會檢查輸出是否正確,如輸出裝置錯誤,將不會執行命令。

5)IO重新導向中,stdout與stderr的管道會先準備好,才從stdin 讀資料

6)tee 在不影響原I/O 的情況下,將stdout 複製一份到檔案去

7)bash執行命令過程:分析命令-變數求值-命令替代(``和$( ))-重新導向-萬用字元展開-確定路徑-執行命令

8)( )將command group置於sub-shell執行,也稱nested sub-shell,有一點非常重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。

3、樣本

1)cat>catfile <test.sh  #cat從test.sh獲得輸入資料,然後輸出給檔案catfile

2)cat > catfile  #從標準鍵盤獲得資料,輸出到catfile

3)cat>catfile <<eof  #這裡,"<<",代表"結束的輸入字元"。當空行輸入eof字元,輸入自動結束,不用ctrl+D

4)cat <>file 以讀寫的方式開啟 file;

5)cmd << delimiter >file,從stdin 中讀入,直至遇到 delimiter 分界符

4、exec

1)exec命令:常用來替代當前shell 並重新啟動一個shell,也就是說,並沒有啟動子shell。使用這一命令時任何現有環境都將會被清除。exec在對檔案描述符進行操作的時候,不會覆蓋當前的shell環境。

2)命令格式

exec 檔案描述符[n] <或> file或檔案描述符或裝置

3)在上面所述的輸入,輸出重新導向,將輸入,輸出繫結檔案或裝置後,只對當前那條指令是有效,如果需要在綁定之後,接下來的所有命令都支援的話,就需要用exec命令。

5、exec樣本

1)exec 6>&1  #將標準輸出與fd 6綁定

    ls /proc/self/fd/

2)exec 1>&6  #恢複標準輸出

3)exec 6>&-  #關閉fd 6描述符

參考

【1】 man手冊

【2】 總結不錯

http://hi.baidu.com/xxjyz/blog/item/59bbbb0394856d1c4bfb51ee.html

http://blog.163.com/zhoumhan_0351/blog/static/39954227201061045630711/

【3】 好文

http://www.360doc.com/content/11/0720/15/379588_134716249.shtml

【4】 講解也比較清晰

http://www.xxlinux.com/linux/article/development/shell/2006-10-16/5018.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.