我用于nohup
在后台运行远程服务器上的命令,并使用nohup.out
文件来检查进度。我可以将其设置nohup
为重写,nohup.out
因为它只包含一行(最后一个标准输出)吗?
答案1
来自评论,似乎用户希望能够检查输出文件,然后在再次检查之前清空它。
为此,启动程序并重定向>>
到输出文件:
$ somecommand >>logfile &
logfile
然后以任何你想要的方式阅读。当你想清空文件时,只需执行
$ >logfile
这会截断文件但将其保留在原处。当程序下次写入输出文件时,它将写入文件的开头。
我们用来>>
以“追加模式”打开文件。这意味着对文件的任何新写入都将始终发生在文件的(当前)末尾。
如果我们使用>
并截断该文件,则文件中的新写入将发生在文件中最初放置的位置。这意味着文件开头和新内容之间的区域将被空字节填充。
答案2
只是使用nohup
而不进行任何重定向,文件nohup.out
以append mode
.
这就是为什么命令检查后文件被截断的原因
> nohup.out
将文件长度设置为零,并将程序的后续输出写入nohup.out
文件的开头。
这正是上述问题的答案所告诉的——而且它有效。这对于冗长的输出可能很有用,在检查运行的当前状态后,文件的内容不再有意义。
正如问题所示,程序的输出只有一行,因此rm nohup.out
下一次调用之前的 a 给出的结果与> nohup.out
唯一的区别是文件在删除后不存在,否则仍保留零长度文件。
答案3
nohup
在外部和/或 shell 特定的实现中,没有任何选项可以满足您的要求。几个替代想法:
通过重定向截断文件。就像是:
nohup firefox 2>&1 > nohup.out &
。通常都是同样的事情,但只是手动完成。rm
在开始新命令之前保存文件。就像是:rm nohup.out; nohup firefox 2>&1 &