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'
어떻게 작동시킬 수 있습니까?
답변
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
답변
쉘을 통해 행을 문자열 인수로 호출하십시오.
sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'