私はシェルスクリプトをbashするのが初めてで、難題に遭遇しました。私は単に「.profile」ファイルをリロードできることを知っています:
. .profile
しかし、私は書いているbashスクリプトで同じことを実行しようとしていますが、動作していません。何か案は?明確にするために提供できるものはありますか?
ありがとう
これを試して、現在のシェルをリロードしてください。
source ~/.profile
これを試して:
cd
source .bash_profile
Bashスクリプトは別のサブシェルで実行されます。これを機能させるためには、この他のスクリプトも入手する必要があります。
〜/ .profileファイルをリロード/ソース化しようとすると、いくつかの問題が発生します。 [これはUbuntu linuxを指します-場合によっては、コマンドの詳細が異なります]
広告。 1)
これをターミナルで直接実行すると、サブシェルは作成されません。したがって、次の2つのコマンドのいずれかを使用できます。
source ~/.bash_profile
または
. ~/.bash_profile
どちらの場合でも、これにより.profileファイルの内容で環境が更新されます。
広告2)次のいずれかの方法で、bashスクリプトを開始できます。
sh myscript.sh
または
. myscript.sh
最初の場合、これはシステムの環境変数に影響を与えないサブシェルを作成し、サブシェルプロセスにのみ表示されます。サブシェルコマンドの終了後、エクスポートなどは適用されません。これはISよくある間違いであり、多くの開発者が多くの時間を失うことになります。
スクリプトに適用された変更をグローバル環境に有効にするには、スクリプトを実行する必要があります
.myscript.sh
コマンド。
スクリプトがサブシェルで実行されないようにするために、この関数を使用できます。 (また、Ubuntu Shellの例です)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
これにより、よくある誤解のいくつかが解消されることを願っています! :Dグッドラック!
試してください:
#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5 # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"