sudo(cd /some/dir; ./runscript.sh) 실패

sudo(cd /some/dir; ./runscript.sh) 실패

따라서 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

더 낮은 수준에서는 sudobash(또는 다른 셸)에서 명령을 실행하는 대신 실제로 전달한 "명령"을 기반으로 새 프로세스를 시작하고 전달한 나머지 인수로 해당 프로세스를 시작합니다.

@heemayl이 지적했듯이 구문을 사용할 수 있습니다 . 이는 합법적인 시스템 실행 파일이기 sudo bash -c '(cd /some/dir; ./runscript.sh)'때문입니다 . Bash 구문의 일부로 명명된 프로세스는 생성할 수 없으며 일반적 으로 유효한 실행 파일 이름이 아닙니다.bashsudo(cd(

관련 정보