簡單的重定向
1、檔案描述符
檔案描述符
裝置檔案
說明
/dev/stdin
标準輸入
1
/dev/stdout
标準輸出
2
/dev/stderr
标準錯誤
2、将 cat 的連續輸出(heredoc方式)重定向到一個檔案
cat > Documents/test.c <
注意:不要将管道和重定向混淆,管道預設是連接配接前一個指令的輸出到下一個指令的輸入,而重定向通常是需要一個檔案來建立兩個指令的連接配接。
3、标準錯誤重定向
将标準錯誤重定向到标準輸出,再将标準輸出重定向到檔案,注意要将重定向到檔案寫到前面
cat Documents/test.c hello.c > somefile 2>&1
或者隻用bash提供的特殊的重定向符号"&"将标準錯誤和标準輸出同時重定向到檔案
cat Documents/test.c hello.c &> somefilehell
4、使用tee指令同時重定向到多個檔案
除了将輸出重定向到檔案,也将資訊列印在終端。那麼你可以使用tee指令來實作:
echo 'hello' | tee hello
exec 指令
用指定的指令替換目前的 Shell,即使用一個程序替換目前程序,或者指定新的重定向
zsh //開啟一個子 Shell
exec 1>somefile //使用exec替換目前程序的重定向,将标準輸出重定向到一個檔案
# 後面執行的指令的輸出都将被重定向到檔案中,直到退出目前子shell,或取消exec的重定向
ls
whereis somefile
exec 3>&- //取消exec的重定向
cat somefile
exit /推出目前子shell
建立輸出檔案描述符
在 Shell 中有9個檔案描述符。上面我們使用了也是它預設提供的0,1,2号檔案描述符。另外我們還可以使用3-8的檔案描述符,隻是它們預設沒有打開而已。
你可以使用下面指令檢視目前 Shell 程序中打開的檔案描述符:
cd /dev/fd/;ls -Al
同樣使用 exec 指令可以建立新的檔案描述符:
zsh
exec 3> somefile
# 先進入目錄,再檢視,否則你可能不能得到正确的結果,然後再回到上一次的目錄
cd /dev/fd/;ls -Al;cd -
# 注意下面的指令>與&之間不應該有空格,如果有空格則會出錯
echo "this is test" >&3
cat somefile
exit
null 檔案
在類 UNIX 系統中,/dev/null,或稱空裝置,是一個特殊的裝置檔案,它通常被用于丢棄不需要的輸出流,或作為用于輸入流的空檔案,這些操作通常由重定向完成。讀取它則會立即得到一個EOF。
我們可以利用設個/dev/null屏蔽指令的輸出:
cat Documents/test.c nefile 1>/dev/null 2>&1
上面這樣的操作将使你得不到任何輸出結果。