shell啟動指令碼中的0 1 2 和 解析

2022-06-15 10:48:10 字數 2552 閱讀 9124

目錄

一、0 1 2 檔案描述符

二、>是重定向符,就是把前面輸出的內容重定向到後面指定的位置

三、& 是乙個描述符,如果1或2前不加&,會被當成乙個普通檔案

nohup sh gmv.sh >ls.txt 2>&1 &  後台執行指令碼的一般格式,並且把日誌(正常日誌和錯誤日誌)輸出到ls.txt中

tail -f ls.txt可以動態檢視日誌

一、0 1 2 檔案描述符

在 shell 程式中,最常使用的 fd (file descriptor) 大概有三個, 分別是:

0 是乙個檔案描述符,表示標準輸入(stdin)

1 是乙個檔案描述符,表示標準輸出(stdout)

2 是乙個檔案描述符,表示標準錯誤(stderr)

在標準情況下, 這些fd分別跟如下裝置關聯: 

stdin(0): keyboard 鍵盤輸入,並返回在前端 

stdout(1): monitor 正確返回值 輸出到前端 

stderr(2): monitor 錯誤返回值 輸出到前端

舉例說明吧:假如當前目錄只有乙個檔案 a.txt

[root@redhat box]# ls 

a.txt 

[root@redhat box]# ls a.txt b.txt 

ls: b.txt: no such file or directory 由於沒有b.txt這個檔案, 於是返回錯誤值, 這就是所謂的2輸出 

a.txt 而這個就是所謂的1輸出

二、>是重定向符,就是把前面輸出的內容重定向到後面指定的位置

再接著看:

[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err 

執行後,沒有任何返回值. 原因是, 返回值都重定向到相應的檔案中了,而不再前端顯示 

[root@redhat box]# cat file.out 

a.txt 

[root@redhat box]# cat file.err 

ls: b.txt: no such file or directory 

一般來說, "1>" 通常可以省略成 ">". 

即可以把如上命令寫成: ls a.txt b.txt >file.out 2>file.err 

有了這些認識才能理解 "1>&2" 和 "2>&1". 

1>&2 正確返回值傳遞給2輸出通道 &2表示2輸出通道 

如果此處錯寫成 1>2, 就表示把1輸出重定向到檔案2中. 

2>&1 錯誤返回值傳遞給1輸出通道, 同樣&1表示1輸出通道. 

舉個例子. 

[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1 

[root@redhat box]# cat file.out 

ls: b.txt: no such file or directory 

a.txt 

現在, 正確的輸出和錯誤的輸出都定向到了file.out這個檔案中, 而不顯示在前端. 

補充下, 輸出不只1和2, 還有其他的型別, 這兩種只是最常用和最基本的.

>是重定向符,就是把前面輸出的內容重定向到後面指定的位置,比如(例1):

echo "一些內容" > filename.txt

上面例子會把 "一些內容" 寫入到 filename.txt 檔案中。

>前是可以加數字來說明把什麼內容重定向到檔案中,預設是把標準輸出重定向到檔案中,所以下面這個例子和上面那個是一樣的(例2):

echo "一些內容" 1> filename.txt

如果是錯誤資訊就不會輸出到filename.txt(例3):

$ ls nodir 1> filename.txt

$ ls: nodir: no such file or directory

上面這個例子中nodir不存在,所以通過ls命令查詢時錯誤資訊會輸出到 2(stderr),但我們指定的是把1重定向到filename.txt,所以上面命令執行完後,filename.txt中是沒有內容的。但是執行下面命令就會把錯誤資訊寫入到filename.txt中(例4):

$ ls nodir 2> filename.txt

$ cat filename.txt

$ ls: nodir: no such file or directory

三、& 是乙個描述符,如果1或2前不加&,會被當成乙個普通檔案

1>&2 意思是把標準輸出重定向到標準錯誤.

2>&1 意思是把標準錯誤輸出重定向到標準輸出。

&>filename 意思是把標準輸出和標準錯誤輸出都重定向到檔案filename中

我們再看乙個例子(列5):

$ ls nodir 1> filename.txt 2>&1

$ cat filename.txt

$ ls: nodir: no such file or directory

上面例子把 標準輸出 重定向到檔案 filename.txt,然後把 標準錯誤 重定向到 標準輸出,所以最後的錯誤資訊也通過標準輸出寫入到了檔案中,比較例3,4,5,就能明白其作用。

shell啟動指令碼

由於客戶特殊需求,公升級軟體時自動修改sf,無需手動,給他們在啟動指令碼裡面新增了修改sf的指令。正好記下。f 2 2 sfdst ls usr s304 etc oversea 3if sfsrc sfdst then 4echo sfcfgname is not right 5 s sfcfgn...

storm啟動指令碼 shell

url 集群啟動指令碼 url bin bash nimbus節點 nimbusservers mini01 mini02 supervisor節點 supervisorservers mini01 mini02 mini03 啟動所有的nimbus for nim in nimbusservers...

storm啟動指令碼 shell

url 集群啟動指令碼 url bin bash nimbus節點 nimbusservers mini01 mini02 supervisor節點 supervisorservers mini01 mini02 mini03 啟動所有的nimbus for nim in nimbusservers...