Unixサービスで環境変数を確認するには?

Unixサービスで環境変数を確認するには?

以下を使用して環境変数を設定しました/etc/profile

export VAR=/home/userhome

そして私がecho $VARこれを行うと、次のように表示されます。/home/userhome

ただし、この変数への参照をファイルに入れると、/etc/init.d/servicename変数は見つかりません。以下を含むファイルservice servicename statusとして実行するとき:/etc/init.d/servicename

case "$1" in
status)    
    cd $VAR/dir
    ;;
esac

それは言う/dir: No such file or directory

しかし、私が/etc/init.d/servicename status代わりに走った場合service servicename status

Unixサービスで環境変数を確認するには?

ベストアンサー1

問題は、をservice除くすべての環境変数を削除することですTERMPATHこれはLANG良いことです。スクリプトを直接実行しても環境変数は削除されないため、すべてがうまく動作します。

環境変数が起動時に存在せず、初期化システムがそれを設定しない可能性があるため、外部環境変数に依存したくありません。

それでもそのような変数に依存したい場合は、ファイルをインポートして変数を読みます。たとえば、次のようにし/etc/default/servicenameます。

VAR=value

次のように初期化スクリプトから取得します。

[ -f /etc/default/service-name ] && . /etc/default/service-name

if [ -z "$VAR" ] ;  then
  echo "VAR is not set, please set it in /etc/default/service-name" >&2
  exit 1
fi

case "$1" in
status)    
    cd "$VAR"/dir
    ;;
esac

おすすめ記事