Linux shell的標準輸入 輸出和錯誤

2021-06-20 08:47:32 字數 1933 閱讀 7801

原文

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 > filename2

command命令以filename檔案作為標準輸入,以filename2檔案作為標準輸出

command < filename

command命令以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然後,通過read命令讀取name.txt的第一行內容line1,第二行內容line2,通過exec 0<&3關閉檔案描述符3;

最後,用echo命令輸出line1和line2。最好在終端執行一下這個指令碼,親自嘗試一下。

例子2:

exec 3<>test.sh;

#開啟test.sh可讀寫操作,與檔案描述符3繫結

while read line<&3

doecho $line;

done

#迴圈讀取檔案描述符3(讀取的是test.sh內容)

exec 3>&-

exec 3<&-

#關閉檔案的,輸入,輸出繫結

參考:

Linux shell標準輸入,標準輸出,錯誤輸出

shell中可能經常能看到 1 dev null 2 1 eg sudo kill 9ps elf grep v grep grep 1 awk 1 dev null 2 dev null 命令的結果可以通過 的形式來定義輸出 dev null 代表空裝置檔案 代表重定向到 例如 echo 123 ...

Linux shell的標準輸入 輸出和錯誤

1.檔案描述符 在linux shell執行命令時,每個程序都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。由於檔案描述符不容易記憶,shell同時也給出了相應的檔名 檔案檔案描述符 輸入檔案 標準輸入 0 預設是鍵盤,為0時是檔案或者其他命令的輸出 輸出檔案 標準輸出 1 預設是螢幕,為...

Linux shell的標準輸入 輸出和錯誤

1.檔案描述符 在linux shell執行命令時,每個程序都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。由於檔案描述符不容易記憶,shell同時也給出了相應的檔名 檔案檔案描述符 輸入檔案 標準輸入 0 預設是鍵盤,為0時是檔案或者其他命令的輸出 輸出檔案 標準輸出 1 預設是螢幕,為...