我使用了下面的命令
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
根本不需要使用。