Linux下Shell重新導向

來源:互聯網
上載者:User

標籤:

1. 標準輸入,標準輸出與標準錯誤輸出

Linux下系統開啟3個檔案,標準輸入,標準輸出,標準錯誤輸出。

標準輸入:從鍵盤輸入資料,即從鍵盤讀入資料。

標準輸出:把資料輸出到終端上。

標準錯誤輸出:把標準錯誤輸出到終端上。

預設的標準輸入指的是鍵盤,預設的標準輸出與標準錯誤輸出指的是螢幕或者是終端。

系統為這三個檔案分配了檔案標識符fd(file descripter).

在Linux系統下,一切皆是檔案,對檔案的操作,一般要用到檔案標識符。它們的檔案標識符,分別為0,1,2.

 

2. 重新導向

重新導向分為輸入重新導向與輸出重新導向。

所謂的輸入重新導向即輸入不從鍵盤讀入,而是從檔案輸入或其它。

所謂的輸出重新導向即不輸出到終端上,而是輸出到檔案中去或其它。

 

""<"表示輸入重新導向運算子,">"表示輸出重新導向運算子。

"<<"這種輸入告訴Shell,當前標準輸入來自命令列的一對分隔號的中間內容。

">>",用">"輸出時,如果檔案不存在會自動建立一個檔案,如果第二次輸入時,會覆蓋前一次的輸入內容,而">>"表示把第二次的輸出內容追加到檔案中去,而不是覆蓋。

3. 下面看一下幾個例子

(1)輸入重新導向

 [[email protected] ~]# wc</etc/inittab
53 229 1666

wc統計行數,單詞數, 字元數

其中wc的輸入來自 /etc/inittab
[[email protected] ~]# wc <<aa
> 1
> 11
> 111
> aa
3 3 9

wc統計分隔字元aa之間的內容。

(2)輸出重新導向

 [[email protected] ~]# ps -ef >a.txt   //把進程的資訊輸出重新導向到a.txt檔案中去

 [[email protected] ~]# ps -ef> >a.txt //進程資訊追加到a.txt的檔案中去

其實,所謂的輸入輸出重新導向就是不從鍵盤輸入和屏輸出。

4. Linux下輸出重新導向的典型分析

(1) a.out > outfile 2>&1
(2) a.out 2> &1 >outfile

分析:

0代表標準輸入,1代表標準輸出,2代表標準錯誤輸出。其中1(即>=1>)可以省略,預設為標準輸出。

(1)首先把a.out重新導向到outfile檔案中去。然後把 2>&1把標準錯誤輸出重新導向到標準輸出中去。此時的標準輸出已經重新導向了,相當於把標準輸出與標準錯誤輸出都一起重新導向到outfile中去。 &1代表的是標準輸出的檔案描述符。1一般放在左邊表示標準輸出重新導向到什麼位置,而1放在右邊是重新導向到標準輸出中,所以用&區分一下,表示標準輸出的檔案描述符。2>1表示把標準錯誤重新導向到檔案1中去,2>&1則表示標準錯誤重新導向到標準輸出中去。

(2)首先把標準錯誤輸出重新導向到標準輸出中,此時標準輸出還在終端。因此標準錯誤也在終端。然後標準輸出到outfile中去了。而標準錯誤還是在終端。

 

因此,(1)表示標準輸出與標準錯誤都到outfile中去了。

         (2)表示標準輸出到outfile,但標準錯誤輸出仍然在終端。

ls 1>/dev/null 2>/dev/null

ls >/dev/null  2>&1

/dev/null是一個垃圾箱,是一個無底洞,表示的含義為不顯示。

即標準輸出與標準錯誤輸出不顯示。

以上兩個命令表示的含義是相同的。

4.exec繫結重新導向

格式:

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

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

執行個體:

[[email protected] shell]$ exec 6>&1 #將標準輸出與fd 6綁定 [[email protected] shell]$ ls /proc/self/fd/ 0  1  2  3  6 #出現檔案描述符6 [[email protected] shell]$ exec 1>suc.txt #將接下來所有命令標準輸出,綁定到suc.txt檔案(輸出到該檔案) [[email protected] shell]$ ls -al #執行命令,發現什麼都不返回了,因為標準輸出已經輸出到suc.txt檔案了 [[email protected] shell]$ exec 1>&6 #恢複標準輸出 [[email protected] shell]$ exec 6>&- #關閉fd 6描述符 [[email protected] ~]$ ls /proc/self/fd/ 0  1  2  3

說明:使用前先將標準輸入儲存到檔案描述符6,這裡說明下,檔案描述符預設會開啟0,1,2 還可以使用自訂描述符 。然後對標準輸出綁定到檔案,接下來所有輸出都會發生到檔案。 使用完後,恢複標準的輸出,關閉開啟檔案描述符6。

有趣事情:

可能有朋友會這樣用:exec 1>suc.txt ,接下來所有輸出都綁定到suc.txt 檔案,那麼怎麼樣恢複原來的呢? 試試你就會發現問題所在……

 

參考資料:

http://blog.csdn.net/jfkidear/article/details/7823486

http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

Linux下Shell重新導向

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.