bash - su 및 $HOME

bash - su 및 $HOME

user1(관리자)과 user2(표준 사용자)라는 두 명의 사용자가 있다고 가정합니다.

  • user1로 로그인
  • 달리다

    sudo su - user2 -c "env"
    
  • 결과에는 $HOME=/home/user2가 표시됩니다.

  • 달리다

    sudo su - user2 -c "echo $HOME" 
    
  • 결과에는 $HOME=/home/user1이 표시됩니다.

왜 그런 겁니까?

답변1

$HOME두 번째 예에서는 쉘이 명령을 실행하기 전에 변수가 확장되므로 실제로 실행 중인 것은 다음과 같습니다.

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

$HOME이는 이 시점에서 변수가 갖는 값이기 때문입니다 .

(또한 두 번째 명령의 출력은 실제로 $HOME=/home/user1가 아니라 그냥 이라고 추측합니다 /home/user1.)

작은따옴표를 사용하면 첫 번째 셸에서 변수 확장을 방지할 수 있습니다.

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

관련 정보