文件描述符與重定向
1 文件描述
linux 中:當一個命令發(fā)生錯誤并回退時,它會返回一個非0的退出狀態(tài);而當命令成功完成后帚豪,它會返回為0的退出狀態(tài)。
退出狀態(tài)可以從特殊變量? 可以打印出退出狀態(tài))犁河。
系統(tǒng)描述符 | 對應輸出 | 描述 |
---|---|---|
0 | stdin | 標準輸入 |
1 | stdout | 標準輸出 |
2 | stderr | 標準錯誤 |
1.1 文件描述的輸出
- 錯誤示范:(輸出到屏幕)
ls + > out.txt
- 正確示范:(指明輸出狀態(tài))
ls + 2> out.txt
- 重定向輸出到兩個文件:
cmd 2>stderr.txt 1>stdoout.txt
- 同時輸出到同一個文件:
cmd 2>&1 alloutput.txt
cmd &> output.txt
1.2 實例:
??創(chuàng)建測試文件:
echo A1 > a1
echo A2 > a2
echo A3 > a3
chmod 000 a1 // 清除 a1 所有權限
??使用通配符 a* 查看所有文件:
cat a* 2> err.txt
cat : a1 permission denied
A2
A3
cat err.txt
cat : a1 permission denied
??cat -n 為從 stdin 中接收到的每一行數(shù)據(jù)前加上行號并將其寫入 stdout:
cat a* | tee out.txt | cat -n
cat: a1: Permission denied
1 A2
2 A3
??要發(fā)送輸入內(nèi)容的兩份副本給 stdout健提,使用 - 作為命令的文件名參數(shù)即可:
echo who is this | tee -
who is this
who is this
2 自定義描述符
2.1 exec 命令創(chuàng)建全新的文件描述符。
描述符的常用打開模式有三種:
只讀模式
追加寫入模式
截斷寫入模式
??<
操作符可以將文件讀入stdin
??>
操作符用于截斷模式的文件寫入(數(shù)據(jù)在目標文件內(nèi)容被截斷后寫入)
??>>
操作符用于追加模式的文件寫入
??>
等同于 1>
??>>
等同于 1>>
2.2 只讀模式
??創(chuàng)建描述符:
exec 3<input.txt //使用文件描述符 3 打開并讀取文件
??使用:
echo this is a test line > input.txt
exec 3<input.txt
cat <&3
this is a test line
2.3 截斷模式
??創(chuàng)建描述符:
exec 4>output.txt
echo newline >&4
cat outpute.txt
newline
2.4 追加模式
??追加模式:
exec 5>>input.txt
echo appended line >&5
cat input.txt
newline
appended line