我有一个程序,可以在上产生有用的信息,stdout
但也可以读取stdin
。我想将其标准输出重定向到文件,而不在标准输入上提供任何内容。到目前为止,一切都很好:我可以做到:
program > output
而且不要在tty中做任何事情。
但是,问题是我想在后台执行此操作。如果我做:
program > output &
程序将被挂起(“暂停(tty输入)”)。
如果我做:
program < /dev/null > output &
该程序立即终止,因为它达到了EOF。
似乎我需要的是插入program
不确定的时间内不做任何事情并且不读取的内容stdin
。以下方法起作用:
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
但是,这一切都非常丑陋。有有是一种优雅的方式,使用标准的Unix工具,到“什么都不做,无限期”(意译man true
)。我怎样才能做到这一点?(我在这里达到优雅的主要标准:没有临时文件;没有繁忙的等待或定期唤醒;没有奇特的实用程序;尽可能短。)
su -c 'while true; do true; done | cat > ~/output &' user
?
1<&-
它会退出程序?
su -c 'program | output &' user
。我将要问一个类似的问题,即创建后台作业作为处理“服务/守护程序”的可接受方法。我还注意到,如果不进行重定向,就无法STDERR
进行重定向STDOUT
。programA 发送STDOUT
到STDIN
programB 的解决方案,然后重定向STDERR
到日志文件:programA 2> /var/log/programA.log | programB 2> /var/log/programB.log 1> /dev/null