shell常用重新導向執行個體講解_linux shell

來源:互聯網
上載者:User

每個開啟的檔案都會被分配一個檔案描述符.stdin (鍵盤), stdout (螢幕), 和 stderr (錯誤訊息輸出到螢幕上)的檔案描述符分別是0, 1, 和 2. 對於正在開啟的額外檔案, 保留了描述符3到9.

檔案描述符是檔案系統為了跟蹤這個開啟的檔案而分配給它的一個數字。

下面以執行個體說明

1,>的用法

複製代碼 代碼如下:

[zhangy@localhost ~]$ echo "11111" > 1.txt
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "11111" 1> 1.txt    //這個用法和上面的用法是一樣
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "22222" >1.txt
[zhangy@localhost ~]$ cat 1.txt
22222

這種用法我想大家都非常的熟悉,因為這是我經常會用到的。echo "11111" > 1.txt 時,>前面是有一個1的,是預設的。>重新導向到檔案時,會將檔案清空,在寫入。

複製代碼 代碼如下:

[zhangy@localhost ~]$ > 1.txt 
[zhangy@localhost ~]$ :> 1.txt 

上面的這個例子,可以把1.txt檔案中的內容清空,其實也很好理解,清空後,不輸入內容當然為空白了。

2,>>的用法

複製代碼 代碼如下:

[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
2222

從上面的這個例子我們可以看出,>>重新導向到檔案時,會將輸出寫到檔案的結尾。這一點和>完全不同的。

3,0,1,2 到9,以及&

複製代碼 代碼如下:

[zhangy@localhost ~]$ cat 1.txt
 333
 111
 222
 444
 [zhangy@localhost ~]$ grep "22" 0< 1.txt  //把1.txt中的內容讀取出來
 222
 [zhangy@localhost ~]$ ls tank 2>> 1.txt   //將錯誤資訊放到檔案的結尾
 [zhangy@localhost ~]$ cat 1.txt
 333
 111
 222
 444
 ls: tank: 沒有那個檔案或目錄                 //這個就是 2>> 1.txt產生的內容
 [zhangy@localhost ~]$ (ls tank ;pwd) &>1.txt   //將錯誤資訊,以及輸出內容放到1.txt檔案中,&(stderr,stdout)
 [zhangy@localhost ~]$ cat 1.txt
 ls: tank: 沒有那個檔案或目錄
 /home/zhangy

i>&j重新導向檔案描述符i 到 j.指向i檔案的所有輸出都發送到j中去. i和j呢是0-9這間的數字

複製代碼 代碼如下:

[zhangy@localhost ~]$ ls tank 2>&1|egrep \* 1> 2.txt  //在這裡我把錯誤資訊重新導向到了1,在這裡1就會輸出錯誤,根賦值差不多
[zhangy@localhost ~]$ cat 2.txt
ls: tank: 沒有那個檔案或目錄

4,<>的用法
<這個符號是讀取,>這個符號是輸出,放在一起就開啟並且讀取,

複製代碼 代碼如下:

[zhangy@localhost ~]$ echo 123546 > 2.txt
[zhangy@localhost ~]$ exec 4<> 2.txt     //開啟2.txt並將內容讀取到&4中
[zhangy@localhost ~]$ read -n 4 <&4      //從&4中讀取4個字元
[zhangy@localhost ~]$ echo -n . >&4      //在向&4寫入一個點
[zhangy@localhost ~]$ exec 4>&-          //關閉輸出檔案描述符4
[zhangy@localhost ~]$ cat 2.txt
1235.6

能過上面的這個例子,就可以很清楚瞭解<>他的作用

5,n<&-關閉輸入檔案描述符n         n>&關閉輸出檔案描述符n

複製代碼 代碼如下:

[zhangy@localhost ~]$ ls tank          //會提示錯誤
ls: tank: 沒有那個檔案或目錄
[zhangy@localhost ~]$ ls tank 2>&-     //我把錯誤關閉後,什麼也不輸出了

6,|管理命令

這個命令也是我們常用的,是典型的,把一個命令的輸出,當作另一個命令的輸入

複製代碼 代碼如下:

[zhangy@localhost ~]$ echo tank | wc -w
 1

表示tank是一個輸出,但它又是wc的輸入,不然就不會有統計出現了。

相關文章

聯繫我們

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