shell學習之< 和 > 差在哪?

來源:互聯網
上載者:User

標籤:shell

嚴格來說,< 符號之前需要指定一個 FD 的(之間不能有空白),

但因為 0 是 < 的預設值,因此 < 與 0< 是一樣的!


>   是定向輸出到檔案,如果檔案不存在,就建立檔案;如果檔案存在,就將其清空;一般我們備份清理記錄檔的時候,就是這種方法:先備份日誌,再用`>`,將記錄檔清空(檔案大小變成0位元組);>>這個是將輸出內容追加到目標檔案中。如果檔案不存在,就建立檔案;如果檔案存在,則將新的內容追加到那個檔案的末尾,該檔案中的原有內容不受影響。

當你搞懂了 0< 原來就是改變 stdin 的資料輸入通道之後,相信要理解如下兩個 redirection
就不難了:
* 1>
* 2>
前者是改變 stdout 的資料輸出通道,後者是改變 stderr 的資料輸出通道。
兩者都是將原本要送出到 monitor 的資料轉向輸出到指定檔案去。
由於 1 是 > 的預設值,因此,1> 與 > 是相同的,都是改 stdout 。


從 file system 的角度來說,單一檔案在單一時間內,只能被單一的 FD 作寫入。
假如 stdout(1) 與 stderr(2) 都同時在寫入 file.both 的話,
則要看它們在寫入時否碰到同時競爭的情形了,基本上是"先搶先贏"的原則。

2>&1 就是將 stderr 並進 stdout 作輸出
* 1>&2 或 >&2 就是將 stdout 並進 stderr 作輸出


在 Linux 檔案系統裡,有個裝置檔位於 /dev/null 。

這個 null 在 I/O Redirection 中可有用得很呢:
* 若將 FD1 跟 FD2 轉到 /dev/null 去,就可將 stdout 與 stderr 弄不見掉。
* 若將 FD0 接到 /dev/null 來,那就是讀進 nothing 。
比方說,當我們在執行一個程式時,畫面會同時送出 stdout 跟 stderr ,
假如你不想看到 stderr (也不想存到檔案去),那可以:
代碼:
$ ls my.file no.such.file 2>/dev/null
my.file
若要相反:只想看到 stderr 呢?還不簡單!將 stdout 弄到 null 就行


為防止重新導向將原有的檔案內容“沖洗”掉,可以選擇>> 追加到檔案末尾。

但是一旦你再次用>重新導向時,還是把所有內容衝掉了。

再此,你可以用以下命令設定是否允許重新導向覆蓋已有檔案

set -o noclobber /*設定禁止重新導向覆蓋*/

set +o noclobber /*設定允許重新導向覆蓋*/


$ cat < file > file 之後原本有內容的檔案結果卻被洗掉了!
要理解這一現像其實不難,這隻是 priority 的問題而已:
* 在 IO Redirection 中,stdout 與 stderr 的管道會先準備好,才會從 stdin 讀進資料。
也就是說,在上例中,> file 會先將 file 清空,然後才讀進 < file ,
但這時候檔案已經被清空了,因此就變成讀不進任何資料了...


在 if 判斷式中,else 部份可以不用,但 then 是必需的。
(若 then 後不想跑任何 command ,可用" : " 這個 null command 代替)。

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.