2017-04-13 56 views
2

我有一個bash腳本,我執行/bin/sh -xe script.sh,我需要捕獲它的輸出。如何在使用-xe執行bash腳本時隱藏env變量?

問題是,在腳本內部我使用了一些ENV變量,我想讓它們不顯示在輸出中。 有沒有辦法做到這一點?

即,如果我的腳本有touch $MY_ENV_VAR和MY_ENV_VAR = ok,則/bin/sh -xe script.sh的輸出將爲touch ok

有沒有辦法讓env vars在-x的輸出中被替換?所以我只會得到+ touch $MY_ENV_VAR

+1

POSIX標準中沒有任何內容允許這樣做。你所能做的就是在你不想顯示的代碼周圍設置+ o xtrace,然後設置-o xtrace。或者,使用'verbose' trace而不是'xtrace',這就是'-v'選項。順便說一句,如果你正在使用'/ bin/sh'執行,那麼它不是一個bash腳本,而是'sh'腳本。 – cdarke

+1

嘗試使用'sh -vex' - 您將在輸出中獲得另一行如何讀取腳本文件('-v')。很難閱讀,但有時可能會有用。 – jm666

+0

謝謝。使用'set -ve'而不是'set -xe'似乎有訣竅。你可以發佈這個答案,以便我可以接受嗎? – daniels

回答

1

POSIX標準中沒有任何內容允許這樣做。所有你可以做的是:

set +o xtrace  # Switch xtrace off 
some hidden code 
set -o xtrace  # Switch xtrace back on 

或者,使用verbose跟蹤,而不是xtrace,這就是-v選項。

/bin/sh -ve script.sh 

順便說一句,如果您正在使用/bin/sh執行那麼它是不是一個bash腳本,它是一個sh腳本。