iT邦幫忙

2022 iThome 鐵人賽

DAY 17
3

會撰寫 alias 之後,今天我們來學習 linux 指令的輸出跟輸入概念。

前面我們使用很多指令時,有一些指令單純做事後沒有回應,像是 mkdir。也有些指令,像是 ls,會印出一些內容。

搭配前面的觀念:其實在 linux 的世界裡面,很多東西,像是指令本身,其實際的內容只是一個檔案而已。

這個觀念,在印出內容上其實也是成立的。對 ls 這樣的指令來說,他是將要輸出的內容,傳輸到一個特殊的檔案「標準輸出」(stdout)裡面。

這樣說起來。其實我們也可以嘗試將原本要輸出在螢幕上的內容,改成輸出到某個實體檔案裡面!

要做到這件事情,我們可以使用 > 這個符號

ls > ls.txt
cat ls.txt 
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1

如果我們重複執行 ls > ls.txt,由於輸入是從檔案的開頭開始往下覆蓋,檔案依舊會是一樣的內容。

如果我們希望輸入的內容從檔案的尾端開始加入,要使用 >> 這個指令

ls >> ls.txt
cat ls.txt 
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1
2022-01
2022-02
2022-03
2022-04
2022-05
2022-06
2022-07
2022-08
2022-09
2022-10
2022-11
2022-12
aaa1.txt
ls.txt
test
test1

如果我們希望將錯誤訊息導入檔案,那就要改成 2>

這邊的 2 代表的是原本的「標準錯誤」(stderr),我們將原本要寫入這邊的內容導向後面的檔案

asdf 2> asdf.txt
cat asdf.txt 
-bash: asdf: command not found

同樣的技巧可以用在我們不想看到錯誤訊息時:將錯誤訊息導入一個不存在的檔案內。在 linux 的世界裡面,可以導入 /dev/null 這個特殊檔案內

asdf 2> /dev/null

順帶一提,/dev/null 作為一個「垃圾桶」這個概念,已經深入 linux 工程師的文化中。比方說,有些人可能會說:「請將投訴傳送到 /dev/null」 或者抱怨:「我的信件被送到 /dev/null

如果你希望同時將指令的輸出和錯誤訊息,都放到某個檔案裡面
,可以使用 &> 這個寫法

asdf &> asdf.txt

今天有關輸入輸出導向的部分,我們先分享到這邊。各位明天見。


上一篇
Day 16:塑造我們自己的魔法捷徑:type、alias、unalias
下一篇
Day 18:再提重新導向:|、sort、grep、wc
系列文
林姓商人與指令操作的秘密—談 Linux command line interface30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言