我有一个程序可以生成有用的信息,stdout但也可以从stdin. 我想将其标准输出重定向到一个文件,而不在标准输入上提供任何内容。到目前为止,很好:我可以做到:
program > output
Run Code Online (Sandbox Code Playgroud)
并且不要在 tty 中做任何事情。
但是,问题是我想在后台执行此操作。如果我做:
program > output &
Run Code Online (Sandbox Code Playgroud)
程序将被挂起(“挂起(tty 输入)”)。
如果我做:
program < /dev/null > output &
Run Code Online (Sandbox Code Playgroud)
程序立即终止,因为它到达 EOF。
似乎我需要的是将program某些内容导入到无限期不执行任何操作且不读取的内容中stdin。以下方法有效:
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
Run Code Online (Sandbox Code Playgroud)
然而,这一切都非常难看。有有是一种优雅的方式,使用标准的Unix工具,以“什么都不做,无限期”(意译man true)。我怎么能做到这一点?(我这里优雅的主要标准:没有临时文件;没有忙碌等待或定期唤醒;没有异国情调的实用程序;尽可能短。)