web-dev-qa-db-ja.com

bashスクリプトのパラメーターを変更せずにサブプロセスに渡す

実行可能ファイルのラッパーとして機能する単純なbashスクリプトを作成したいと思います。スクリプトが受け取るすべてのパラメーターを実行可能ファイルに渡すにはどうすればよいですか?私は試した

/the/exe $@

しかし、これは引用されたパラメータでは機能しません。

./myscript "one big parameter"

走る

/the/exe one big parameter

これは同じことではありません。

47
EMP

シェルスクリプトが実行可能ファイルをラップし、実行可能ファイルの完了後に何もしたくない場合(私の経験では、これはラッパースクリプトの一般的なケースです)、実行可能ファイルを呼び出す正しい方法は次のとおりです。

exec /the/exe "$@"

execビルトインは、フォークせずに実行可能ファイルに制御を与えるようにシェルに指示します。

実際には、これにより、ラップされたプロセスが終了するまで、無駄なシェルプロセスがシステム内でぶらぶらするのを防ぎます。

これは、execコマンドの後にコマンドを実行できないことも意味します。

66
ddaa

$@を引用符で囲む必要があります。

/the/exe "$@"
15
sth