編譯文件時,若編譯過程時間長,可以將 標准錯誤 重定向 輸出到一個文件中 2 > 1.txt 也可以通過管道 重定向 到 標准輸出 2 > &1
Linux shell的標准輸入、輸出和錯誤
標簽: linux shellshell重定向
2013-08-19 20:42 30403人閱讀 評論(0) 收藏 舉報
分類:
系統運維(42)
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
1.文件描述符
在linux shell執行命令時,每個進程都和三個打開的文件相聯系,並使用文件描述符來引用這些文件。由於文件描述符不容易記憶,shell同時也給出了相應的文件名:
文件文件描述符輸入文件—標准輸入0(缺省是鍵盤,為0時是文件或者其他命令的輸出)輸出文件—標准輸出1(缺省是屏幕,為1時是文件)錯誤輸出文件—標准錯誤2(缺省是屏幕,為2時是文件)系統中實際上有12個文件描述符,我們可以任意使用文件描述符3到9.
2.文件重定向:改變程序運行的輸入來源和輸出地點
2.1.輸出重定向:
Command > filename把標准輸出重定向到一個新文件中Command >> filename把標准輸出重定向到一個文件中(追加)Command > filename把標准輸出重定向到一個文件中Command > filename 2>&1把標准輸出和錯誤一起重定向到一個文件中Command 2 > filename把標准錯誤重定向到一個文件中Command 2 >> filename把標准輸出重定向到一個文件中(追加)Command >> filename2>&1把標准輸出和錯誤一起重定向到一個文件(追加)2.2.輸入重定向:
Command < filename > filename2Command命令以filename文件作為標准輸入,以filename2文件作為標准輸出Command < filenameCommand命令以filename文件作為標准輸入Command << delimiter 從標准輸入中讀入,知道遇到delimiter分界符2.3.綁定重定向
Command >&m把標准輸出重定向到文件描述符m中Command < &-關閉標准輸入Command 0>&-同上3.shell重定向的一些高級用法
3.1.重定向標准錯誤
例子1:
command 2> /dev/null
如果command執行出錯,將錯誤的信息重定向到空設備
例子2:
command > out.put 2>&1
將command執行的標准輸出和標准錯誤重定向到out.put(也就是說不管command執行正確還是錯誤,輸出都打印到out.put)。
3.2.exec用法
exec命令可以用來替代當前shell;換句話說,並沒有啟動子shell,使用這一條命令時任何現有環境變量將會被清除,並重新啟動一個shell(重新輸入用戶名和密碼進入)。
exec command
其中,command通常是一個shell腳本。
對文件描述符操作的時候用(也只有再這時候),它不會覆蓋你當前的shell
例子1:
#!/bin/bash
#file_desc
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
其中:
首先,exec 3<&0 0<name.txt的意思是把標准輸入重定向到文件描述符3(0表示標准輸入),然後把文件name.txt內容重定向到文件描述符0,實際上就是把文件name.txt中的內容重定向到文件描述符3。然後通過exec打開文件描述符3;
然後,通過read命令讀取name.txt的第一行內容line1,第二行內容line2,通過Exec 0<&3關閉文件描述符3;
最後,用echo命令輸出line1和line2。最好在終端運行一下這個腳本,親自嘗試一下。
例子2:
exec 3<>test.sh;
#打開test.sh可讀寫操作,與文件描述符3綁定
while read line<&3
do
echo $line;
done
#循環讀取文件描述符3(讀取的是test.sh內容)
exec 3>&-
exec 3<&-
#關閉文件的,輸入,輸出綁定
參考:
http:///content/955662.html
http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/
/content/4072889.html
/content/573612.html