
Linux のログイン初期化で bash が何をするかをデバッグしようとしています。「bash -x」を実行すると、bash は実行内容を出力しますが、「set -x」のようにソース ファイル内のコマンドは出力しません。初期化が実行されてから呼び出すので、「set -x」は使用できません。「bash -x」は OS X では再帰的に正常に実行されるようですが、これは bash のバージョンによるものかもしれません。
リナックス: 3.2.25
OS X: 3.2.48
以下は Linux での非再帰動作の抜粋です。
bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...
/etc/profile.d/vim.sh がソース化されているのに、そのコマンドが印刷されていないことに注意してください。アップグレードせずに回避策はありますか? これはバージョンの違いが原因ですか?
答え1
set -x
ルート ファイル (他のすべてのファイルを必要とするファイル) のどこかで機能するはずです。または、[[ !-z "$DEBUG" ]] && set -x
各ファイルに のようなものを導入し、 を呼び出しますDEBUG=1 script.sh
。
答え2
スクリプトをソースするだけで実行はしないので、メイン スクリプトの最初のコマンドは「set -x」にする必要があります。
これで、すべてのソース スクリプトがデバッグで実行されるようになります。スクリプトをソースすると、現在のシェルで実行されることに注意してください。したがって、-x を 1 回設定すると、すべてのソース スクリプトに適用されます。