명령 프롬프트에서 if 문 실행


19

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단지 test및 / 또는 단지 echo. 전체 if진술이 아닙니다 .
jippie

당신은 의미 if sudo test합니까? 예, 더 좋습니다. 종료 코드를 그렇지 않으면 설정하기 때문에, test없이 사용할 수 없습니다 if.
m33lky 2016 년

답변:


14

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

내가 사용하는 경우에 따라서, -i또는 -s의 경우 문이 제대로 평가 될 것인가?
m33lky 2016 년

1
예, 인용되거나 제대로 탈출하지 않는 한 가능합니다. 내 편집을 참조하십시오.
Kevin

9

쉘을 통해 행을 문자열 인수로 호출하십시오.

sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.