명령 프롬프트에서 if 문 실행 /tmp/test.txt ]; then echo “true”; fi 그러나 sudo앞에

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'

어떻게 작동시킬 수 있습니까?



답변

sudoexec쉘 인터프리터가 아닌을 사용하여 인수를 실행합니다 . 따라서 실제 바이너리 프로그램으로 제한되며 쉘 함수, 별명 또는 내장을 사용할 수 없습니다 ( 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'


답변