例如一个脚本dumb.sh的内容为
#! /bin/bash idx=1 echo $idx
/bin/bash -x dumb.sh的结果为:
+idx=1+echo 11
而且/bin/bash -x dumb.sh > trace.log后,trace.log内容仅为:
1
有什么办法将/bin/bash -x dumb.sh的整个结果保存下来么?
處理方法:
/bin/bash -x dump.sh > trace.log 2>&1
原因:用strace追蹤
strace /bin/bash -x dump.sh
結果:
write(2, "+ idx=1\n", 8+ idx=1 ) = 8 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 write(2, "+ echo 1\n", 9+ echo 1 ) = 9 write(1, "1\n", 21 ) = 2 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(255, "", 29) = 0 exit_group(0) = ?
可以看出+idx=1和+echo1是write(2,),這個是標準錯誤輸出,雖然打螢幕,但是>預設不會把這個內容寫入檔案。 如下這個指令可以把標準錯誤重新導向到1中
/bin/bash -x dump.sh > aa 2>&1
在man bash手冊中章節:CONDITIONAL EXPRESSIONS,-x的意思是:
CONDITIONAL EXPRESSIONS
-x
-x file True if file exists and is executable.
參數-x會列出shell執行語句的順序並列印。 +echo 1這種語句並不是腳本的輸出,所以不能儲存到檔案中。
+echo 1
-x 偵錯模式
處理方法:
原因:
用strace追蹤
結果:
可以看出+idx=1和+echo1是write(2,),這個是標準錯誤輸出,雖然打螢幕,但是>預設不會把這個內容寫入檔案。
如下這個指令可以把標準錯誤重新導向到1中
在man bash手冊中章節:
CONDITIONAL EXPRESSIONS
,-x
的意思是:參數
-x
會列出shell執行語句的順序並列印。+echo 1
這種語句並不是腳本的輸出,所以不能儲存到檔案中。-x 偵錯模式