SHELLOPTS は /bin/dash と同じです。

SHELLOPTS は /bin/dash と同じです。

第三者が定義した多くのシェルスクリプトを実行する必要があります。したがって、コンテンツまたは使用中のシェル(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て実行します。

おすすめ記事