Shell 重定向

  1. 輸入和輸出

    改變輸入或輸出的默認路徑就叫重定向。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章