私のシェルスクリプトのソースは何ですか?

私のシェルスクリプトのソースは何ですか?

私のホームディレクトリにaとaがあります.zshrc.zshenv私のコマンドに新しいコマンドを追加しましたが、.zshenvそのコマンドが3回以上実行されることがわかりました。誤って削除しsourceたことを認識し、その.zshrc行を削除しましたが、まだ2回実行されました。

私はスクリプトに合計を反映しようとし、$0最初のパスと2番目のパスを得ました。それはどういう意味ですか?発信者を示す「スタックトレース」を取得するより良い方法はありますか?$_(~/.zshenv) (~/.zshenv)(30) (zsh)

答え1

電話をかけるときは、zshスイッチを使用して現在の状況をデバッグできます-x。結果とともに実行された各行を表示するという点で、スイッチbashに似ています。-x

$ zsh -x
    ...
+/etc/profile.d/mc.sh:3> alias 'mc=. /usr/libexec/mc/mc-wrapper.sh'
+_src_etc_profile_d:9> i=/etc/profile.d/PackageKit.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/PackageKit.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/PackageKit.sh
+_src_etc_profile_d:9> i=/etc/profile.d/qt.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/qt.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/qt.sh
+/etc/profile.d/qt.sh:9> [ -z /usr/lib64/qt-3.3 ']'
+_src_etc_profile_d:9> i=/etc/profile.d/udisks-bash-completion.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/udisks-bash-completion.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/udisks-bash-completion.sh
+/etc/profile.d/udisks-bash-completion.sh:3> [ -z '' ']'
+/etc/profile.d/udisks-bash-completion.sh:3> return
+_src_etc_profile_d:9> i=/etc/profile.d/vim.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/vim.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/vim.sh
+/etc/profile.d/vim.sh:1> [ -n '' -o -n '' -o -n 4.3.10 ']'
...

後で見るために出力をファイルにリダイレクトすることもできます。

$ zsh -x 2>&1 | tee zsh.log

最後に中断されそうです。Ctrl+をc停止し、結果のログファイルを見てくださいzsh.log

答え2

変更を適用しましたかsource ~/.zshrc?または、変更を適用するには、ログアウトして再度ログインしてください。

関連情報