shスクリプトから別のshスクリプトはsu -l <user> -c /path/to/script.sh
。私が理解しているのは、script.sh
非対話型シェルで実行されます。公式ドキュメントでは、これらの非対話型シェルで変数を設定する方法、つまり変数をBASH_ENV
[http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html]。これは明らかに初心者にとっては不適切な説明であり(実際)例もありません($ SEARCH_ENGINEでも見つかりません)。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
多くの意味があるかもしれません[1]。非対話型シェルに渡される環境変数の例を挙げることができる人はいますか?
確かに、ログインした状態とログインしていない状態、対話型と非対話型の違いは明らかです(https://superuser.com/questions/636219/where-should-i-export-an-environment-variable-so-that-all-combinations-of-bash-dまたは興味のある人がいる場合は、参照リンクをご覧ください。
[1]私は努力した
BASH_ENV="\\$PATH=$PATH\\n\\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOME
BASH_ENV="\$PATH=$PATH\n\$JAVA_HOME=$JAVA_HOME" su -l artifactory -c echo $JAVA_HOME
su -l artifactory -c echo $JAVA_HOME
答え1
スクリプトの場合sh
(たとえば、明示的に参照されているが呼び出すのと同じ場合#!/bin/sh
があります)、環境変数を使用してファイルを指定できます。bash
--posix --no-rc --no-profile
ENV
ENV
ENV=/path/to/rcfile sh
$ENV
特定の変数は、上記のようにコマンドラインで宣言または使用する必要がありますexport
。たとえば、次のように$PATH
なります。
export "PATH=$PATH:/some/more/paths"; sh
参照する変数はインポートする必要があるファイルではなく、$BASH_ENV
呼び出し時には解釈されません。ただし、非対話型シェルを呼び出すときに取得されるファイルへのパスです。たとえば、スクリプトを使用して指定されます。bash
sh
bash
#!/bin/bash
...または爆発物ライン。
スクリプト/シェルを呼び出すもう1つの方法は、env
ユーティリティを使用することです。環境から値を明示的に削除したり、最初から値を消去するのに最も簡単に使用できます。
env - BASH_ENV=/path/to/rcfile /usr/bin/bash /some/script/file
これは、すべての引数が追加されたコマンドをenv
呼び出して環境変数を指定するように指示しますが、そうでなければ完全にクリーンな環境です。/usr/bin/bash
$BASH_ENV