Bash에서는 다음을 수행할 수 있습니다.
if [ -f /tmp/test.txt ]; then echo "true"; fi
그러나 sudo
앞에 추가하면 더 이상 작동하지 않습니다.
sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'
어떻게 작동하게 할 수 있나요?
답변1
sudo
exec
쉘 인터프리터를 통하지 않고 쉘 인터프리터를 사용하여 인수를 실행하십시오 . 따라서 실제 바이너리 프로그램으로 제한되며 쉘 함수, 별칭 또는 내장 함수( if
내장 함수)를 사용할 수 없습니다. -i
및 옵션 을 -s
사용하여 각각 로그인 또는 비로그인 셸에서 특정 명령을 실행할 수 있습니다(또는 대화식으로 셸을 실행합니다. 세미콜론을 이스케이프하거나 명령을 인용해야 합니다).
$ sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ sudo if [ -n x ]\; then echo y\; fi
sudo: if: command not found
$ sudo -i if [ -n x ]\; then echo y\; fi
y
$ sudo -s 'if [ -n x ]; then echo y; fi'
y
답변2
셸을 통해 문자열 인수로 이 줄을 호출해 보세요.
sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'