これらのコマンドを実行すると、次のように出力されます。 /ルート
$ Sudo -u someuser -i "echo $HOME"
/root
$ runuser -l someuser -c "echo $HOME"
/root
$ su - someuser -c "echo $HOME"
/root
私が期待したのは
/home/someuser
Envコマンドを実行して環境を検査すると、HOME変数が正しく報告されます。
$ su - someuser -c "env"
...
HOME=/home/someuser
...
$ Sudo -u someuser -i "env"
...
HOME=/home/someuser
...
$ runuser -l someuser -c "env"
...
HOME=/home/someuser
...
私がやりたいのは、ユーザーのホームディレクトリの下でスクリプトを実行することです。/home/someuser/scripts。
as $ {HOME} /scripts/somescript.sh
$ Sudo -u someuser ${HOME}/scripts/somescript.sh
Sudo: /root/scripts/somescript.sh: command not found
私が期待したのは:
$ Sudo -u someuser ${HOME}/scripts/somescript.sh
...
script output.
...
接線関係:
Sudo -u someuser -i "echo $HOME"
私にはまったく機能しません。それは言う:
-bash: echo $HOME: command not found
要点:コマンドを実行すると
Sudo -u someuser -i echo $HOME
変数$HOME
は、Sudoが実行される前に、シェルによって展開されます。
これを解決するには、次のようなコマンドを使用できます
Sudo -u someuser -i bash -c 'echo $HOME'
このコマンドでは、echo $HOME
UIDを切り替えた後、文字通りbashに送信されます。
結果は期待どおりです。
/home/someuser
あなたがするとき
su - someuser -c "echo $HOME"
currentシェルは$ HOME firstを展開し、結果はコマンド(この場合はsu
)に渡され、次に次のように実行されているシェルプロセスに渡されます。新しいユーザー。
一重引用符で変数を保護してみてください
su - someuser -c 'echo $HOME'