script.sh
次の行を含むbashスクリプトがあります。
sudo -u myusername sh ~/.profile
シェルから呼び出すことはできますが、source ~/.profile
スクリプトでは機能しませんが、このコマンドは機能します。現在のシェルが私の内容を読むように強制します。~/.profile
しかし、私のコンテンツには~/.profile
次の行が含まれています。
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
ただし~/.bashrc
、これを実行すると、script.sh
次のエラーが発生します。
/home/username/.profile: 24: /home/username/.profile: source: not found
myまたはmyを変更せずに~/.bashrc
my ~/.profile
(別のスクリプトから呼び出されます)から自分のファイルをインポートできますか?~/.bashrc
~/.profile
その後、script.sh
私のファイル~/.profile
と~/.bashrc
ファイルがダウンロードされ、正しい場所に保存されます。したがって、script.sh
ダウンロード後にこれらのファイルをインポートして実行するために使用するシェルセッションに影響を与えたいと思います。script.sh
ベストアンサー1
エラーは、理解できない実行可能~/.profile
ファイルを使用しようとしたときに発生します(代わりに他のすべてのPOSIXシェルでも機能する(ドット)を使用してください)。sh
source
sh
.
bash
また、実行時に~/.profile
ファイルが実行されるシェルで設定する環境変数は設定されません。これは、独自のサブシェルで実行されるためです。
~/.profile
サブシェル(取得ではなく実行時に取得するもの)は、親シェル(スクリプトを実行するシェル)の環境にはまったく影響しません。したがって、ファイルに変数を設定しないと、~/.profile
その変数がスクリプトで設定されるとは期待できません。source
実行は現在シェルの子プロセスなので、sudo source ~/.profile
ここでは役に立ちません。sudo
関連する追加情報:
~/.profile
インタラクティブシェル(ソース~/.bashrc
コードの入手先)で実行されないスクリプトの環境を設定するには、スクリプトをBASH_ENV
呼び出すときに変数を適切なファイルに設定します。これにより、コントロールをスクリプトに渡す前にソースコードがファイルになりますbash
。$BASH_ENV
たとえば、
BASH_ENV="$HOME/.profile" "$HOME/scripts/myscript.sh"
これはただこれは、スクリプトが非対話型シェルセッション(cron操作など)で呼び出され、環境変数またはソースファイル内のすべてのファイルを設定するためにアクセスする必要がある場合に~/.profile
必要です~/.profile
。
対話型シェルセッションでは、BASH_ENV
変数をこのように設定する必要はなく、スクリプトはこれらの変数を取得する必要がないか、すでに取得しているため必要ありませ~/.bashrc
ん~/.profile
。