管道預設是連線前乙個命令的輸出到下乙個命令的輸入
linux中提供三個標準輸入與輸出:
檔案路徑
檔案作用
/dev/stdin
用於標準輸入
/dev/stdout
用於標準輸出
/dev/stderr
用於錯誤輸出
簡單的重定向
# 通過管道把檔案的輸出作為cat的輸出,並把cat的輸出作為檔案test的輸入當輸入追加為eof結束
echo
'hello'
|cat
>
test
<
echo
'xx'
|cat
# 輸出結果為xx
標準錯誤重定向# 將標準錯誤重定向到標準輸出,再將標準輸出重定向到檔案,注意要將重定向到檔案寫到前面
$ cat documents/test.c hello.c >somefile 2>
&1# 或者只用bash提供的特殊的重定向符號"&"將標準錯誤和標準輸出同時重定向到檔案
$ cat documents/test.c hello.c &
>somefilehell
tee命令,用於重定向到多個檔案
你可能還有這樣的需求,除了需要將輸出重定向到檔案,也需要將資訊列印在終端。那麼你可以使用tee命令來實現:
# 通過管道和tee命令重定向檔案
echo
'hello world'
|tee hello
# 終端輸出並把內容重定向輸入到檔案hello中
永久重定向
zsh用於在當前終端開啟子終端,輸入exit結束
前面的重定向操作都只是臨時性的,即只對當前命令有效,那如何做到「永久」有效呢,比如在乙個指令碼中,你需要某一部分的命令的輸出全部進行重定向,難道要讓你在每個命令上面加上臨時重定向的操作嘛,當然不需要,我們可以使用exec命令實現「永久」重定向。exec命令的作用是使用指定的命令替換當前的 shell,即使用乙個程序替換當前程序,或者指定新的重定向:
# 先開啟乙個子 shell
$ zsh
# 使用exec替換當前程序的重定向,將標準輸出重定向到乙個檔案
$ exec 1>somefile
# 後面你執行的命令的輸出都將被重定向到檔案中,直到你退出當前子shell,或取消exec的重定向
$ ls
$ exit
$ cat somefile
完全遮蔽命令的輸出
在 linux 中有乙個被稱為「黑洞」的裝置檔案,所有匯入它的資料都將被「吞噬」。
在類 unix 系統中,/dev/null,或稱空裝置,是乙個特殊的裝置檔案,它通常被用於丟棄不需要的輸出流,或作為用於輸入流的空檔案,這些操作通常由重定向完成。讀取它則會立即得到乙個eof。
我們可以利用設個/dev/null遮蔽命令的輸出:
cat ss 1>/dev/null
資料流重定向
重定向,將原本輸出到標準輸出的資料重定向到乙個檔案中,因為標準輸出 dev stdout 本身也是乙個檔案,我們將命令輸出導向另乙個檔案自然也是沒有任何問題的。下面我們簡單的回顧一下我們前面經常用到的兩個重定向操作 echo hello shiyanlou redirect echo www.jly...
資料流重定向
linux在你登入時,便將預設的標準輸入 標準輸出 標準錯誤輸出安排成你的終端。i o重定向就是你通過與終端互動,或者在shell script裡設定,重新安排從 輸入或者輸出到 每個程式都應該有標準輸入 輸出 錯誤輸出 重定向的方法大抵有 管道等 先了解stdin stdout stderr。標準...
資料流重定向
linux在你登入時,便將預設的標準輸入 標準輸出 標準錯誤輸出安排成你的終端。i o重定向就是你通過與終端互動,或者在shell script裡設定,重新安排從 輸入或者輸出到 每個程式都應該有標準輸入 輸出 錯誤輸出 重定向的方法大抵有 管道等 先了解stdin stdout stderr。標準...