本文字數:2467,閱讀時長大約:3分鐘
導讀:重定向是一種十分高效的數據流動方式,它能幫你減少很多鼠標和鍵盤上的操作。
https://linux.cn/article-12385-1.html
作者:Seth Kenlon
譯者:jx.zeng
對於任何編程或腳本語言,輸入與輸出重定向都是很自然的功能。嚴格來說,當你使用電腦時,數據自然而然地在發生著重定向。從stdin(標準輸入,通常是你的鍵盤或者鼠標)讀取輸入,輸入則發往stdout(標準輸出,一段文本或者數據流),最後錯誤信息送至stderr。如果你使用Bash或Zsh之類的 shell,那麼理解這些數據流能夠讓你更好地控制信息流向。
標準輸入、標準輸出以及標準錯誤輸出都存在於 Linux 文件系統中。你可以在/dev查看:
$ ls /dev/std*
/dev/stderr@ /dev/stdin@ /dev/stdout@
你可能沒法直接使用它們,但將它們想象成你能傳遞數據的元位置,會很有幫助。
重定向的基礎很簡單:用一些>符號重定向輸出,然後用另外一些符號重定向輸入。
重定向輸出
將ls命令的輸出寫入一個文件:
$ ls > list.txt
你沒法像平常那樣看到ls的輸出,因為它們並沒有被髮送到屏幕,而是被寫入list.txt文件了,這個功能用處太多了,事實上,你甚至可以用它來將文件內容拷貝到另一個文件。不一定是文本文件,你也可以用將重定向用於二進制數據:
$ cat image.png > picture.png
(你可能會好奇為什麼要這樣做,有時候對於文件權限信息而間接有用。)
重定向輸入
你也能將輸入重定向“到”一個命令。可以說,它沒有重定向輸出那麼有用,因為許多命令已經被硬編碼,只從你的參數中接收輸入。但是,如果某個命令需要一系列參數,而且你把這些參數寫在文件裡,想要快速“複製粘貼”到終端的時候(除非你並不想複製粘貼),它就幫得上忙了。
$ sudo dnf install $(
重定向輸入得常規用法是嵌入文檔(here-document)(簡寫成 here-doc)和嵌入字符串(here-string)技巧。這種輸入方法將一整塊文本重定向至標準輸入流,直到碰見一個特殊的文件結束標記(許多人習慣用EOF,實際上你可以使用任何字符串,只要它是唯一的)。試著把這些(在第二個EOF標記之前)敲進你的終端:
$ echo
> foo
> bar
> baz
> EOF
輸出結果:
foo
bar
baz
使用Bash編寫腳本的人常常用這個技巧,將數行文本一次性寫入文件或者打印到屏幕上。只要你別忘了末尾的文件結束標記,這會是一個幫你避免大量繁瑣echo或printf語句的好辦法。
嵌入字符串類似於嵌入文檔,但是它只含有一個字符串(或者用引號包裹的幾個字符串,同樣會被當成一個字符串)
$ cat
foo bar baz
重定向錯誤信息
錯誤信息流叫做stderr,通過2>實現這個目的。下面這個命令把錯誤信息定向到output.log文件:
$ ls /nope 2> output.log
將數據送往 /dev/null
既然標準輸入、標準輸出和錯誤輸出都有自己的位置,那麼“空空如也”也應該在 Linux 文件系統佔有一席之地。沒錯,它叫做null,位於/dev,頻繁使用的人懶得說 “slash dev slash null”,於是索性叫它 “devnull”。
通過重定向,你可以把數據發送到/dev/null。比如,find命令常常會輸出很多具體信息,而且在搜索文件遇到權限衝突時,會事無鉅細地報告:
$ find ~ -type f
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file
find命令把那些當作錯誤,所以你可以只把錯誤信息重定向至/dev/null:
$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file
使用重定向
在 Bash 中,重定向是轉移數據的有效方法。你可能不會頻繁使用重定向,但是學會如何使用它,能幫你在打開文件、複製粘貼數據這類需要移動鼠標、大量按鍵操作上,節省很多不必要的時間。不要做如此浪費時間的事情。使用重定向,好好享受生活。
via:https://opensource.com/article/20/6/redirection-bash
作者:Seth Kenlon選題:lujun9972譯者:nophDog校對:wxy
本文由LCTT原創編譯,Linux中國榮譽推出
轉載請超鏈接註明:頭條資訊 » 通過重定向在 Linux 終端任意讀寫數據
免責聲明 :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。