xtrace に表示されない bash 関数の定義 (set -x)

xtrace に表示されない bash 関数の定義 (set -x)

bashスクリプトには、log()複数の場所で使用される関数とlogs()多数の行をlog()set -xlogs()log()

私は定義logs()し、log()少なくともその内容とせいぜい呼び出しまでもset -x出力から抑制したいと思います。

ベストアンサー1

関数内で関数が呼び出される方法を変更することはできませんが、サブシェルを呼び出す関数を定義できます。これにより、通常の中括弧の代わりに本文の周りに括弧が表示されます。

log() (
  set +x
  # rest of log()
)

その後、呼び出しは関数の残りの後続のコマンドではなく、呼び出しlog()自体(既存のset -xコードから)と呼び出しのみを生成します。この機能を終了すると、既存の設定が復元されます。set +xset -x

おすすめ記事