19

を介して設定される変数があります.bashrc

~/.bashrc

PROJ_HOME=~/Projects/stable

bashシェルから、次のようなことをしたいと思います。

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

ただし、これを行うと、期待値/home/kenneth/Projects/stableが出力されません。

これをどのように行うことができるかについてのアイデアはありますか?

4

6 に答える 6

18

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

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

例: su -m kenneth -c 'echo $PROJ_HOME'

于 2012-05-07T20:42:50.567 に答える
9

変数をエクスポートする必要があります。環境を維持するために-mオプションを使用する必要がない場合があります。su

export PROJ_HOME=~/Projects/stable
于 2012-05-07T21:26:45.567 に答える
7

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

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

于 2012-05-07T20:40:05.933 に答える
-3

コマンドを一重引用符で囲みます。

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

$PROJ_PATH二重引用符は、ルート (空の文字列) から見た値を解釈し"echo (empty string)"、ユーザー kenneth としてコマンドを実行します。

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

于 2013-02-09T21:37:34.203 に答える