私は.bashrc
で設定された変数を持っています。suに現在のユーザー環境変数を与える方法
~/.bashrc
で:bashシェルから
PROJ_HOME=~/Projects/stable
、私はこのような何かをしたいと思います:
$ su -l kenneth -c 'echo $PROJ_HOME'
をしかし、私はこれを行う際に、プリントアウトされていない/home/kenneth/Projects/stable
を期待します。
どうすればいいですか?
私は.bashrc
で設定された変数を持っています。suに現在のユーザー環境変数を与える方法
~/.bashrc
で:bashシェルから
PROJ_HOME=~/Projects/stable
、私はこのような何かをしたいと思います:
$ su -l kenneth -c 'echo $PROJ_HOME'
をしかし、私はこれを行う際に、プリントアウトされていない/home/kenneth/Projects/stable
を期待します。
どうすればいいですか?
あなたは、変数をエクスポートする必要があります。環境を保護するためにsu
に-m
オプションを使用する必要はありません。コマンド周り
export PROJ_HOME=~/Projects/stable
su -m -l kenneth -c 'echo $PROJ_HOME'
をお試しください。 -m環境を保存する必要があります。
EDIT あなたの質問をもう一度読み、私はそれが逆のことを理解するかもしれないと思う。 また、これを試すこともできます:su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME
。
su -mオプションを試しましたか?例えば
-m, --preserve-environment
do not reset environment variables
ます。su -mケネス-c 'エコー$ PROJ_HOME'
答えがありがたいですが、動作しないようです。 '$ su -m kenneth -c"は$ PROJ_PATH "をエコーします。 空の行があります。 –
使用単一引用符:
$ su -l kenneth -c 'echo $PROJ_PATH'
二重引用符は、ユーザケネスとしてコマンド"echo (empty string)"
を実行し、ルート(空文字列)によって見られるよう$PROJ_PATH
の値を解釈します。
一重引用符は、コマンドとして'echo $PROJ_PATH'
を渡します。ケネスの環境では$PROJ_PATH
の値がエコーされます。
エクスポートがrootのenv varsに変更されると仮定します。 'su -m'はROOTのenvを保持していますか?ケネスのですか? – 8None1
@ 8None1:マニュアルページによると: "現在の環境を維持する..."それは、ユーザが 'su 'を呼び出す環境を意味します(おそらく、kennethの - rootは質問の情報に基づいて関与していないでしょう)。 –