Bash
/bin/dash 等效的 SHELLOPTS
我必須執行一些由第三方定義的 shell 腳本。所以我不能(或不想)改變他們的內容或他們正在使用的外殼(bash vs. dash)。他們可能會或可能不會通過 shebang 指定。
但是,我想將所有執行的命令列印到標準輸出。對於 bash,我可以使用
env SHELLOPTS=xtrace ./script.sh
. 但是,這僅在使用 shebang 時才有效#!/bin/bash
。如果#!/bin/dash
使用或不使用shebang,則沒有效果。我可以使用 dash 的等效環境變數嗎?我知道我可以添加
set -x
到腳本的頂部,這對兩個 shell 都有效,但如果可能的話,我想避免這種情況。
沒有通用的替代品。
對於
xtrace
僅頂級腳本的特殊情況,您可以使用dash -x ./script.sh
如果您不想編輯腳本。您可以做的另一件事是創建一個包裝腳本,例如
#!/bin/dash set -x . ./script.sh
在評論中你說你不想把事情綁起來。你可以寫一個程序,例如這個叫做 xtrace
#!/bin/bash where=$(command -v "$1") read line1 < "$where" case "$line1" in (*"dash") # Assume if it mention dash on first line then it is a dash script exec /bin/dash -x "$@" ;; (*) SHELLOPTS=xtrace exec "$@" ;; esac
然後
xtrace ./script.sh
用來執行它。