Shell基礎 執行指令碼並輸出日誌檔案

2021-09-07 02:49:27 字數 1015 閱讀 4737

shell 錯誤輸出重定向到標準輸出 

./tmp/test.sh > /tmp/test.log 2>&1
>和《是檔案重定向符。那麼1和2是什麼?

shell中每個程序都和三個系統檔案相關聯

三個系統檔案的檔案描述符分別為0,1和2。 

所以這裡2>&1的意思就是將標準錯誤也輸出到標準輸出當中。

下面通過乙個例子來展示2>&1有什麼作用:

test.sh中包含兩個命令,其中t是乙個不存在的命令,執行會報錯,預設情況下,錯誤會輸出到stderr。date則能正確執行,並且輸出時間資訊,預設輸出到stdout。

標準輸出重定向到log檔案中,標準錯誤列印在螢幕上

可以看到,date的執行結果被重定向到log檔案中了,而t無法執行的錯誤則只列印在螢幕上。

標準輸處和標準錯誤重定向到同一log檔案中

$ ./test.sh > test2.log 2>&1

$ cat test2.log

./test.sh: line 1: t: command not found

tue oct 9 20:53:44 cst 2007

這次,stderr和stdout的內容都被重定向到log檔案中了。

實際上, >就相當於1>也就是重定向標準輸出,不包括標準錯誤。通過2>&1,就將標準錯誤重定向到標準輸出了(stderr已作為stdout的副本),那麼再使用》重定向就會將標準輸出和標準錯誤資訊一同重定向了。

標準輸處和標準錯誤重定向到不同log檔案中

如果只想重定向標準錯誤到檔案中,則可以使用2> file。

sh test.sh 1>log.log 2>log_err.log

shell 執行指令碼

第一行,宣告直譯器 bin bash 符號能夠被核心識別成是乙個指令碼的開始,這一行必須位於指令碼的首行,bin bash是bash程式的絕對路徑,在這裡表示後續的內容將通過bash程式解釋執行。shell指令碼的執行 1 輸入指令碼的絕對路徑或相對路徑 root helloworld.sh hel...

linux 日期遍歷並執行指令碼

date y m d 顯示前天年月日 date y m d date 1 day 顯示前一天的日期 date y m d date 1 day 顯示後一天的日期 date s 從 1970 年 1 月 1 日 00 00 00 utc 到目前為止的秒數 時間戳 1 順序執行 bin bash sta...

shell 執行指令碼的幾種方式

最近在linux下使用shell的時候,碰到一些問題,最後將shell執行指令碼的方式總結如下 1 點號 指令碼的路徑 test.sh 當前使用者需要對 test.sh有執行許可權 即x許可權 指令碼執行環境在子shell中,子shell執行完指令碼後將結果返回。2 sh 空格 指令碼的路徑 或者 ...