4

我正在尝试使用执行以下操作的 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)。我该怎么做呢?

4

2 回答 2

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

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

于 2013-07-16T19:04:55.580 回答
3

您可以使用命名管道

# 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 的答案所示,在这种情况下可能会更好。然而,命名管道与匿名管道有一些优点(在这种情况下可能不适用),正如Stackexchange question中所解释的那样。

于 2013-07-16T19:14:04.827 回答