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

您需要将其作为命令提供给bashas()来解释,以便bash在子 shell 中运行括号内的命令:

sudo bash -c '(cd /some/dir; ./runscript.sh)'

答案2

在较低级别,sudo不是在 bash(或其他 shell)中运行命令,而是实际上根据您传递的“命令”启动一个新进程,并使用您传递的其余参数启动该进程。

正如@heemayl 指出的,您可以使用语法sudo bash -c '(cd /some/dir; ./runscript.sh)'.这是因为bash它是合法的系统可执行文件。sudo无法创建名为 bash 语法一部分的进程(cd(并且通常不是有效的可执行文件名称。

相关内容