したがって、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
(