Shell中的檔案重定向
阿新 • • 發佈:2018-12-30
重定向指的是改變程式執行的輸入來源和輸出地點。
重定向標準輸出
cat file | sort 1 > sort.out
cat file | sort >sort.out #這兩個命令等同
pwd >> path.out #追加
nullfile.txt #如果想建立一個長度為0的空檔案,可以用' > f i l e n a m e ':
重定向標準輸入
- eg1:
sort < file
將file的內容輸入到sort進行排序,排序後的結果sort命令輸出
sort < name.txt > name.out
- eg2:分隔符用法 —表示結合cat命令從標準輸入輸入內容到指定檔案,遇到指定內容結束輸入操作
重定向標準錯誤
eg:$ grep "trident" missiles 2>/dev/null
在這個例子中,grep命令在檔案missiles 中搜索trident字串,如果出錯,錯誤資訊會重定向到/dev/null。
結合使用標準輸出和標準錯誤
eg:$ cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err
指令碼/命令的正常輸出和錯誤資訊重定向到不同的檔案中。
eg: grep “standard” standard.txt >grep.out 2>&1
指令碼/命令的正常輸出和錯誤資訊都重定向到同一個檔案中。
注意:shell是從左至右分析相應的命令
exec和檔案描述符在一起
exec命令可以用來代替當前shell;換句話說,並沒有啟動子shell,使用這一命令時,任何現有環境都將被清除,並重新啟動一個shell。
exec command
command通常是一個shell指令碼。測試執行完該命令後,需要重新登入shell,然後export宣告的變數都失效了。
exec命令對檔案描述符進行操作時,它不會覆蓋你的當前的shell。
#!/bin/bash
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
實現檔案描述符3快取標準輸入(檔案描述符為0),然後將指定檔案重定向到標準輸入,在操作完指定檔案以後,再從快取檔案(3)恢復標準輸入。