スクリプトを何度もインポートしないでください

スクリプトを何度もインポートしないでください

現在のMacで端末を開くと、自動的に次のように呼び出されます。

source ~/.bash_profile

~/.bashrcしかし、私を混乱させるのは私のシェルです~/.profile。しかし、それはおそらく典型的なことでしょう。

sourceで使用または継承されたスクリプトがたくさんあります.。これらの呼び出しを入れると、~/.bash_profile新しいシェルウィンドウをロードするのに時間がかかることがあり、時々3〜4秒かかることがあり、これは古くなることがあります。私はこれらのスクリプトを一度だけインポートし、私のファイルに何らかの方法でそれを継承させる方法があると思います~/.bash_profile

私の ~/.bash_profile から source ~/.bashrc または source ~/.profile を呼び出すことは私が望むものではなく、おそらく悪い考えです。これは、各新しいシェルがゆっくりロードされる問題を解決できないため、私がしたいことではありません。

新しいbash端末ウィンドウを開くたびに、次の内容が記録されます。

starting to load /etc/profile
finished loading /etc/profile
starting to load bash_profile
finished loading bash_profile

これは言葉ですが、残念です。新しいシェルを開くたびに実際にロードする必要がありますか?毎回すべてをリロードする必要がないように素晴らしい継承を実行できないのはなぜですか?

問題を示す動画を作成しました。私が定期的に使用する端末アプリケーションは4つあります。

terminal.app                  # misbehaves
iterm2                        # misbehaves
webstorm terminal emulator    # misbehaves
vscode terminal emulator      # behaves!

VSCodeは実際に私が望む方法で実行されます。私の考えでは、親シェルに〜/ .bash_profileをロードしてこれを行い、vscodeが起動したときに一度だけ実行するようです。アプリケーションのすべてのターミナルウィンドウは、この親シェルのサブシェルです。

この動画で問題が明確になることを願っています。 https://www.uselooom.com/share/4e62f0cb24434c4a83b8bd32844b596a

これは妥当な質問です。ほとんどのターミナルアプリケーションはすべての操作を誤って実行しますが、非常に奇跡的に、MicrosoftのVSCodeは実際にすべての操作を正しい方法で実行します。次の質問を参照してください。

https://youtrack.jetbrains.com/issue/WEB-31390

ベストアンサー1

陳腐な表現はソースよりもソースを中心に書く方が良いのではないかと思います。 (例:Cヘッダファイル)

[[ "${_NAME_OF_THIS_LIBSCRIPT:-""}" == "yes" ]] && return 0
_NAME_OF_THIS_LIBSCRIPT=yes

これにより、複数の場所で共有されるコンテンツを含める必要があるスクリプトファイルを取得するたびに同じ定型句を繰り返す必要がなくなります。それとも私が何かを見逃しているのでしょうか?正直言って、私はbashプログラミングの専門家ではないので、他の人の意見を聞きたいです。

おすすめ記事