我需要一种方法来使进程永远保持某个文件打开.这是我到目前为止的一个例子:
sleep 1000 > myfile &
它工作了一千秒,但实际上并不想做一些复杂的睡眠/循环声明.这篇文章暗示cat与sleep无限是一回事.所以我尝试了这个:
cat > myfile &
它几乎看起来像是一个错误不是吗?它似乎从命令行工作,但在脚本中文件连接没有保持打开状态.还有其他想法吗?
psm*_*ars 16
您也可以使用bash打开其中一个文件描述符,而不是使用后台进程:
exec 5>myfile
Run Code Online (Sandbox Code Playgroud)
(exec此处的特殊用途允许更改当前文件描述符重定向 - man bash有关详细信息,请参阅参考资料).这将打开文件描述符5到"myfile"(>>如果你不想清空文件,请使用).
您可以稍后再次关闭该文件:
exec 5>&-
Run Code Online (Sandbox Code Playgroud)
(一个可能的缺点是,FD会被同时运行的shell运行的每个程序继承.大多数情况下这是无害的 - 例如你的greps和seds通常会忽略额外的FD - 但在某些情况下它可能很烦人,尤其是如果你产生任何留下的进程(因为它们将保持FD打开).
之所以cat>myfile&有效,是因为它将标准输入重定向到文件中.
如果你用&符号(在后台)启动它,它将不会获得任何输入,包括文件结束,这意味着它将永远等待并且不输出任何输出文件.
您可以获得相同的效果,除非依赖于标准输入(后者是使其在您的脚本中不起作用的原因),使用以下命令:
tail -f /dev/null > myfile &
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6992 次 |
| 最近记录: |