이 명령을 실행하면 표시된 대로 출력됩니다. /뿌리
$ 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/스크립트.
${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
변수는 $HOME
sudo가 실행되기 전에 쉘에 의해 확장됩니다.
이 문제를 해결하려면 다음과 같은 명령을 사용할 수 있습니다.
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'