如何将参数传递给 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

相关内容