を介して設定される変数があります.bashrc
。
で~/.bashrc
:
PROJ_HOME=~/Projects/stable
bashシェルから、次のようなことをしたいと思います。
$ su -l kenneth -c 'echo $PROJ_HOME'
ただし、これを行うと、期待値/home/kenneth/Projects/stable
が出力されません。
これをどのように行うことができるかについてのアイデアはありますか?
オプション su -m を試しましたか?
-m, --preserve-environment
do not reset environment variables
例: su -m kenneth -c 'echo $PROJ_HOME'
変数をエクスポートする必要があります。環境を維持するために-m
オプションを使用する必要がない場合があります。su
export PROJ_HOME=~/Projects/stable
で試してくださいsu -m -l kenneth -c 'echo $PROJ_HOME'
。-m 環境を維持する必要があります。
編集あなたの質問をもう一度読んで、逆に理解したかもしれないと思います。これを試すこともできます: su -l kenneth -c '. /home/kenneth/.bashrc; echo $PROJ_HOME'
.
コマンドを一重引用符で囲みます。
$ su -l kenneth -c 'echo $PROJ_PATH'
$PROJ_PATH
二重引用符は、ルート (空の文字列) から見た値を解釈し"echo (empty string)"
、ユーザー kenneth としてコマンドを実行します。
一重引用符は'echo $PROJ_PATH'
コマンドとして渡され、$PROJ_PATH
kenneth の環境での値がエコーされます。