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
(또한 두 번째 명령의 출력은 실제로는 that이 아니라 그냥 that 이라고 추측합니다 /home/user1
.)
작은따옴표를 사용하면 첫 번째 셸에서 변수 확장을 방지할 수 있습니다.
$ sudo su - user2 -c 'echo $HOME'
/home/user2