非対話型シェルに環境変数を渡す方法(例を含む)は何ですか?

非対話型シェルに環境変数を渡す方法(例を含む)は何ですか?

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-profileENVENV

ENV=/path/to/rcfile sh

$ENV特定の変数は、上記のようにコマンドラインで宣言または使用する必要がありますexport。たとえば、次のように$PATHなります。

export "PATH=$PATH:/some/more/paths"; sh

参照する変数はインポートする必要があるファイルではなく、$BASH_ENV呼び出し時には解釈されません。ただし、非対話型シェルを呼び出すときに取得されるファイルへのパスです。たとえば、スクリプトを使用して指定されます。bashshbash

#!/bin/bash

...または爆発物ライン。

スクリプト/シェルを呼び出すもう1つの方法は、envユーティリティを使用することです。環境から値を明示的に削除したり、最初から値を消去するのに最も簡単に使用できます。

env - BASH_ENV=/path/to/rcfile /usr/bin/bash /some/script/file

これは、すべての引数が追加されたコマンドをenv呼び出して環境変数を指定するように指示しますが、そうでなければ完全にクリーンな環境です。/usr/bin/bash$BASH_ENV

関連情報