2012-05-07 17 views
9

私は.bashrcで設定された変数を持っています。suに現在のユーザー環境変数を与える方法

~/.bashrcで:bashシェルから

PROJ_HOME=~/Projects/stable 

、私はこのような何かをしたいと思います:

$ su -l kenneth -c 'echo $PROJ_HOME' 

をしかし、私はこれを行う際に、プリントアウトされていない/home/kenneth/Projects/stableを期待します。

どうすればいいですか?

答えて

7

あなたは、変数をエクスポートする必要があります。環境を保護するためにsu-mオプションを使用する必要はありません。コマンド周り

export PROJ_HOME=~/Projects/stable 
+0

エクスポートがrootのenv varsに変更されると仮定します。 'su -m'はROOTのenvを保持していますか?ケネスのですか? – 8None1

+0

@ 8None1:マニュアルページによると: "現在の環境を維持する..."それは、ユーザが 'su 'を呼び出す環境を意味します(おそらく、kennethの - rootは質問の情報に基づいて関与していないでしょう)。 –

6

su -m -l kenneth -c 'echo $PROJ_HOME'をお試しください。 -m環境を保存する必要があります。

EDIT あなたの質問をもう一度読み、私はそれが逆のことを理解するかもしれないと思う。 また、これを試すこともできます:su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME

8

su -mオプションを試しましたか?例えば

-m, --preserve-environment 
       do not reset environment variables 

ます。su -mケネス-c 'エコー$ PROJ_HOME'

+5

答えがありがたいですが、動作しないようです。 '$ su -m kenneth -c"は$ PROJ_PATH "をエコーし​​ます。 空の行があります。 –

-1

使用単一引用符:

$ su -l kenneth -c 'echo $PROJ_PATH' 

二重引用符は、ユーザケネスとしてコマンド"echo (empty string)"を実行し、ルート(空文字列)によって見られるよう$PROJ_PATHの値を解釈します。

一重引用符は、コマンドとして'echo $PROJ_PATH'を渡します。ケネスの環境では$PROJ_PATHの値がエコーされます。

関連する問題