bash - su と $HOME

bash - su と $HOME

2人のユーザーがいると仮定します: user1 (管理者) と user2 (標準ユーザー)

  • ユーザー1としてログイン
  • 走る

    sudo su - user2 -c "env"
    
  • 結果は$HOME=/home/user2と表示されます。

  • 走る

    sudo su - user2 -c "echo $HOME" 
    
  • 結果は$HOME=/home/user1と表示されます。

何故ですか?

答え1

$HOMEこれは、2番目の例では、シェルがコマンドを実行する前に変数が展開されるため、実際に実行されているのは次のようになります。

sudo su - user2 -c "echo /home/user1" 

$HOMEこの時点で変数が持つ値だからです。

(また、2 番目のコマンドの出力は実際には では $HOME=/home/user1なく、単に であると思われます/home/user1)。

一重引用符を使用すると、最初のシェルでの変数の展開を防ぐことができます。

$ sudo su - user2 -c 'echo $HOME' 
/home/user2

関連情報