2

ファイルで使用可能な値を持つ環境変数を設定するシェル スクリプトを作成しています。以下は私が書いたシェルスクリプトです。

VARIABLE_FILE=env-var.dat
if [ -f ${VARIABLE_FILE} ] ; then
   . ${VARIABLE_FILE}
   if [ ! -z "${TEST_VAR1}" ] ; then
      export TEST_VAR1="${TEST_VAR1}"
   fi
   if [ ! -z "${TEST_VAR2}" ] ; then
      export TEST_VAR2="${TEST_VAR2}"
   fi
fi

export コマンドを使用して環境変数を設定し、他のシェルで使用すると失敗するため、上記のコードは bash シェルでのみ機能します。どのシェルでも機能する環境変数を設定するコマンドはありますか?

4

2 に答える 2

0

これが本当に必要な場合は実行できますが、注意が必要です。これを行う 1 つの方法は、awk を使用して正しい構文を出力し、awk から返されるテキストを評価することです。主要な sh および csh フレーバー間で単一の環境変数値ファイルを共有するには、ファイル内で次のコマンドを実行すると、変数値ファイルが環境にインポートされます: .awk ファイルを使用してもかまわない場合は、awk -f を使用できます...)

eval `awk '{ var = $1; $1="";  val=substr($0,2); if ( ENVIRON["SHELL"] ~ /csh$/) { print "setenv", var, " \"" val "\";" } else { print var "=\"" val "\"" ; print "export", var }}' $HOME/env_value_file`

変数値ファイルの形式は次のとおりです。

FOO value for foo
BAR foo bar
BAZ $BAR plus values $FOO

教育目的のデザインノート:

  1. awk では、フィールド 2 から NF にアクセスする簡単な方法がないため、変数値にスペースが含まれている可能性がある場合は、$1 を変更して $0 を取得し、目的の値に近づける必要があります。
  2. これを機能させるには、SHELL 変数は常に設定されますが、環境変数としてではなく、大文字と小文字が一貫していないため、以下のようにシェルの値から SHELL 環境変数をウェットにする必要があります。スクリプトを使用する前に、環境変数として。
  3. また、インポート環境スクリプトの後に新しい環境値を表示する場合は、環境スクリプトをソースする必要があります。
  4. シェルが eval をうまく実行しない場合は、スクリプトを微調整する必要があります。

ボーン シェル フレーバー (bash、sh、ksh、zsh) の場合:

export SHELL
. import_environment

csh フレーバーの場合: (シェル変数は、csh シェルでは小文字になる傾向があります)

setenv SHELL "$shell"
source import_environment
于 2013-03-24T08:30:12.520 に答える