輸入和輸出
改變輸入或輸出的默認路徑就叫重定向。
0:標準輸入
1:標準輸出
2:標準錯誤
標準輸入特點:
它是默認的輸入方法,它被所有命令使用來讀取輸入。
它用數字0表示
它也被稱作stdin
默認的標準輸入設備是鍵盤
操作符"<"是輸入重定向操作符。
command < input_filename
標準輸出:
它被命令用來寫入或顯示命令自身的輸出
它用數字1表示
它也被稱作stdout
默認的標準輸出設備是屏幕。
操作符">"是輸出重定向操作符。
command > output_filename
標準錯誤:
它是默認的錯誤輸出方法,它被用於寫入所有系統錯誤信息。
它用數字2表示
它也被成爲stderr
默認的標準輸出設備是屏幕或顯示器。
操作符"2>"是標準錯誤重定向操作符。
command 2> errors_filename
2.重定向
在linux系統中,總有3個默認的設備文件是打開的,即標準輸入、標準輸出、標準錯誤。這三個文件和其他地方被打開的文件,都可以被重定向。重定向簡單地說就是從文件、命令、程序、腳本、甚至是腳本中代碼塊獲取輸出並把它作爲輸入發送到另一文件、命令、程序或腳本。
每個打開的文件被指定一個描述。0、1、2分別爲標準輸入 輸出 錯誤。對於打開的另外的文件,這裏餘留了文件描述符3-9.
文件重定向:
輸出到文件
command > file
從文件輸入
command < file
{
read line1
read line2
}<file
while read LINE
do
commands
done < file
if true; then
read LINE
fi < file
從文本或字符串輸入
here-documents
command <<[-]MARKER
here document
MARKER
- 標識忽略行首的製表符
command <<< WORD
tr a-z A-Z <<<"one two three"
例:
空文件創建
>file
>logfile
丟棄不需要的輸出
command > /dev/null
標準錯誤重定向
command 2> /tmp/error.log
command 2>> /tmp/error.log
標準輸出重定向
command > outfile
標準錯誤和標準輸出同時重定向
command &> file
command >& file
command > file 2>&1
command 2>&1 >file
追加重定向
符號">>" 用於追加重定向輸出
command >> filename
單個命令行進行標準輸入輸出重定向
command < input-file > output-file
3.文件描述符
Shell有時會引用使用文件描述符(fd)的文件。一般fd 0-9 大於9的文件描述符要謹慎使用,因爲它們可能與Shell內部使用的文件描述符衝突。
有些文件描述符是在Shell啓動時被建立的,這就是我們前面介紹的標準輸入、標準輸出和標準錯誤(0,1,2)文件描述符。
使用exec命令
exec 2>errfile
之後的所有命令,標準錯誤輸出都會到errfile裏
exec 3<$1
while read -u 3 line
do
echo $line
read -p "Press any key:" -n 1
done
#關閉文件描述符3
exec 3&-
指定用於輸入的文件描述符
exec [n]<file
其中,[n]即文件描述符,如果不指定n,則標識標準輸入(即文件描述符0)
指定後,就可以從文件描述符n上讀取此文件的內容。
例:
exec 3< /etc/passwd
grep root <& 3
操作符"&<",它也是一種重定向操作符,用於複製輸入文件描述符。
[n]<&word
如果word是數字,則用n表示文件描述符作爲文件描述符word的副本。
指定用於輸出的文件描述符
給一個輸出文件指定一個文件描述符
exec [n]>file
exec 4> /tmp/out.file
[n]>&word
操作符">&",複製輸出描述符
如果n沒指定,則表示標準輸出。
關閉文件描述符
[n]<&-
或[n]>&-
打開用於讀寫的文件描述符
exec [n]<>file