第三者が定義した多くのシェルスクリプトを実行する必要があります。したがって、コンテンツまたは使用中のシェル(bash vs dash)を変更することはできません(または変更したくありません)。 Shebangでこれを指定することも、指定しない場合もあります。
しかし、実行されたすべてのコマンドを標準出力として印刷したいと思います。 bashの場合env SHELLOPTS=xtrace ./script.sh
。 shebangの有無にかかわらず#!/bin/bash
効果はありません。#!/bin/dash
ダッシュに同等の環境変数を使用できますか?スクリプトの上部に追加すると、両方のシェルset -x
で動作することがわかりますが、可能であればこれを避けたいと思います。
ベストアンサー1
一般的な代替品はありません。
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
て実行します。