“nohup cat”——将完整内容写入日志文件而不是连接文件

“nohup cat”——将完整内容写入日志文件而不是连接文件

我使用了下面的命令

nohup cat fastp-filtered/OZBenth*_R1.fastp.fq.gz > fastp-filtered-merged4racon/merge_R1.fq.gz > merge_R1.out.log 2>&1 &

但不幸的是,输出去了merge_R1.out.log而不是去merge_R1.fq.gz

我错过了什么?

答案1

重定向以从左到右的方式处理。

当执行类似命令时

somecommand >f1 >f2 >f3

shell 将首先创建或截断(清空)文件f1,然后f2是最后f3。然后它开始somecommand将其标准输出连接到f3

要将命令的输出保存到多个文件,您必须复制每个输出文件的数据。这是最简单的方法tee

somecommand | tee f1 f2 >f3

这会将 的输出发送到somecommand并将tee其复制到两个文件f1和中f2。该tee实用程序还在其自己的标准输出上生成相同的数据,在上面的命令中,我们只需将其重定向到f3.

在你的情况下,你会使用

nohup cat fastp-filtered/OZBenth*_R1.fastp.fq.gz 2>&1 |
tee fastp-filtered-merged4racon/merge_R1.fq.gz >merge_R1.out.log &

2>&1使得错误流也cat被发送tee(这可能是不需要的,因为任何错误都会损坏生成的存档)。

tee截断其输出文件,就像>所做的那样。tee与它的选项一起使用-a将数据附加到输出文件。


不过,您实际上不太可能将所有输出cat写入两个文件,因此假设您想要保存错误到日志文件和串联档案到输出文件,你应该这样做

nohup cat fastp-filtered/OZBenth*_R1.fastp.fq.gz \
    >fastp-filtered-merged4racon/merge_R1.fq.gz \
    2>merge_R1.out.log &

tee根本不需要使用。

相关内容