bash - suと$ HOME

bash - suと$ HOME

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

  • user1でログイン
  • 走る

    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なぜなら、この時点の変数値だからです。

$HOME=/home/user1(また、2番目のコマンドの出力は実際にはthatではなくただthatと推測します /home/user1。)

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

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

関連情報