따라서 Bash에서는 잘 작동합니다.
(cd /some/dir; ./runscript.sh)
/some/dir/runscript.sh가 존재한다고 가정합니다.
하지만
sudo (cd /some/dir; ./runscript.sh)
오류로 인해 실패합니다:
-bash: syntax error near unexpected token `cd'
왜?
답변1
서브셸에서 대괄호로 묶인 명령을 실행 하려면 해석되도록 bash
명령 으로 제공해야 합니다 .()
bash
sudo bash -c '(cd /some/dir; ./runscript.sh)'
답변2
더 낮은 수준에서는 sudo
bash(또는 다른 셸)에서 명령을 실행하는 대신 실제로 전달한 "명령"을 기반으로 새 프로세스를 시작하고 전달한 나머지 인수로 해당 프로세스를 시작합니다.
@heemayl이 지적했듯이 구문을 사용할 수 있습니다 . 이는 합법적인 시스템 실행 파일이기 sudo bash -c '(cd /some/dir; ./runscript.sh)'
때문입니다 . Bash 구문의 일부로 명명된 프로세스는 생성할 수 없으며 일반적 으로 유효한 실행 파일 이름이 아닙니다.bash
sudo
(cd
(