Bash

’nohup cat’ – 將完整內容寫入日誌文件而不是連接文件

  • March 15, 2019

我使用了以下命令

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.

我錯過了什麼?

重定向以從左到右的方式處理。

執行類似的命令時

somecommand >f1 >f2 >f3

shell 將首先創建或截斷(清空)文件f1,然後是f2最後f3。然後它從somecommand連接到的標準輸出開始f3

要將命令的輸出保存到多個文件,您必須為每個輸出文件複製數據。這是最容易完成的tee

somecommand | tee f1 f2 >f3

這會將輸出發送somecommandteewhich 將其複製到兩個文件f1f2. 該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

引用自:https://unix.stackexchange.com/questions/506474