bashでexecが実行するコマンドにパラメータを渡す方法は?

bashでexecが実行するコマンドにパラメータを渡す方法は?

Bashスクリプトで一意のプロセス名を持つ子プロセスを開始しようとしています。これは働きます:

bash -c "exec -a MyUniqueProcessName './start_service' &"

しかし、私の問題は、次start_serviceのタスクを実行すると、パラメータを 。

bash -c "exec -a MyUniqueProcessName './start_service param' &"

または

bash -c "exec -a MyUniqueProcessName './start_service $myvar' &"

それでは失敗したと文句を言う

/start_service param: No such file or directory

私は何が間違っていましたか?

ベストアンサー1

execユーティリティとそのパラメータを次のように考えてください。分離議論:

bash -c "exec -a MyUniqueProcessName './start_service' 'param1' 'param2' 'etc.' &"

OpenBSDでテスト済み:

$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
1898 hello 5
$ bash -c 'exec -a hello sleep 5 &' && ps -a | grep hello
18164 p1  Sp       0:00.01 hello 5 (sleep)
26417 p1  R+/0     0:00.01 grep hello

Ubuntuで同じテスト(いくつかのコールバックを受け取りましたが、私はsleepクエリしたときに得ましたhello。大丈夫でしょう。Linuxは奇妙なものが混在しています):

$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
2849889 sleep

-fここに追加を参照してくださいps

$ bash -c 'exec -a hello sleep 5 &' && ps -af | grep hello
myself  2851359       1  0 17:41 pts/0    00:00:00 hello 5
myself  2851361 2848295  0 17:41 pts/0    00:00:00 grep hello

おすすめ記事