これらのコマンドを実行すると、次のように出力されます。/root
$ 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 の下のスクリプトを
${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.
...
答え1
関連:
sudo -u someuser -i "echo $HOME"
私には全く機能しません。次のように書かれています:
-bash: echo $HOME: command not found
要点:コマンドを実行すると
sudo -u someuser -i echo $HOME
sudo が実行される前に、変数は$HOME
シェルによって展開されます。
これを解決するには、次のようなコマンドを使用します。
sudo -u someuser -i bash -c 'echo $HOME'
このコマンドでは、echo $HOME
UID を切り替えた後に、そのまま bash に送信されます。
結果は予想通りです:
/home/someuser
答え2
そうすると
su - someuser -c "echo $HOME"
の現在シェルは$HOMEを展開します初め、結果はコマンド(su
この場合は)に渡され、そこから新しいユーザーとして実行されているシェル プロセスに渡されます。
変数を一重引用符で保護してみてください
su - someuser -c 'echo $HOME'