他のユーザーとしてコマンドを実行するときに環境変数を渡す方法は?

他のユーザーとしてコマンドを実行するときに環境変数を渡す方法は?

私はルートとして

# WWWFOLDER=myproject
# echo $WWWFOLDER
myproject
# su - anothershelluser /bin/bash -c "echo $WWWFOLDER"

#

ご覧のとおり、私は何も印刷しません。

私は試しましたが、成功しませんでした。

# su - anothershelluser /bin/bash -c "echo ${WWWFOLDER}"

# su - anothershelluser /bin/bash -c 'echo ${WWWFOLDER}'

# su - anothershelluser /bin/bash -c 'echo $WWWFOLDER'

質問

実行するbashコマンドにWWWFOLDERを渡すにはどうすればよいですか?

ベストアンサー1

渡す-ことは、su環境を消去してログインをシミュレートするように明示的に要求することです。

ただ置いてください-

また、ほとんどのsu実装ではターゲットユーザーのログインシェルにコードを渡すため、その-cシェル構文のコードを渡す必要があります。そのシェルがBourneに似ている場合:

# export VAR=value
# su anothershelluser -c 'printf "%s\n" "$VAR"'
value

ターゲットユーザーのログインシェルに関係なくbashシェルを実行する必要がある場合(なぜそうするのか)、ターゲットユーザーのログインシェル構文を使用してそのbashシェルを実行するようにコードを設定する必要があります。

The Bourne Supremacyと同じなら、次のようになります。

su anothershelluser -c 'exec bash -c '\''printf "%s\n" "$VAR"'\'

sudo代わりに使用する方がsu簡単です。

sudo -E -u anothershelluser bash -c 'printf "%s\n" "$VAR"'

-E環境を保護するためにsudo必ずしも環境を保護するわけではありません。みんな環境)。

zshシェルには、UID、EUID、GID、EGID、またはUSERNAME変数を割り当ててuid / gids変更をサポートする機能が組み込まれています。問題は次のとおりです。

(USERNAME=anothershelluser; bash -c 'printf "%s\n" "$VAR"')

(また、pamスタック呼び出し、ロギング、追加のptyラッパーの追加など、su / sudoが実行するすべての追加操作をスキップします。)

おすすめ記事