天天看點

linux建立重定向指令,Linux 學習筆記(十三):Linux 資料流重定向

簡單的重定向

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

上面這樣的操作将使你得不到任何輸出結果。