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(

関連情報