将参数(通过bash脚本)提供给已在运行的进程

时间:2013-07-16 19:01:45

标签: bash

我正在尝试使用bash脚本执行以下操作(伪代码):

#!/bin/bash
run myapp (which needs arguments given from stdin)
/* do some extra stuff */
provide arguments to hanging process myapp

例如,假设您运行myapp,并在运行后询问您的姓名。即,我通过bash运行它,但我还不想给它起个名字。我只想让它现在运行,而在此期间bash会做其他一些事情,然后我想提供我的名字(仍然通过bash)。我该怎么做呢?

2 个答案:

答案 0 :(得分:5)

您可以使用匿名管道:

# open a new file descriptor (3) and provide as stdin to myapp
exec 3> >(run myapp) 

# do some stuff ....

# write arguments to the pipe
echo "arg1 arg2 -arg3 ..." >&3

与命名管道相比,优势在于您无需担心清理,也不需要任何写入权限。

答案 1 :(得分:3)

您可以使用named pipe

# create the named pipe
mkfifo fifo

# provide the named pipe as stdin to myapp
./myapp < fifo

# do something else
# ...

# write the arguments to the named pipe
./write_args_in_some_way > fifo

# remove the named pipe
rm fifo

您也可以使用匿名管道,如@ hek2mgl的回答所示,在这种情况下可能更好。但是,如this Stackexchange question中所述,命名管道与匿名管道有一些优点(在这种情况下可能不适用)。