Files

管道命令未按預期工作我需要解釋

  • August 6, 2015

我正在嘗試執行以下操作

touch ~/scratches/scr6.txt | cat ~/scr.txt > ~/scratches/scr6.txt | cat /dev/null > ~/scr.txt

我不知道為什麼 scr6.txt 總是空的,但是做下面的填充文件

cat ~/scr.txt > ~/scratches/scr6.txt

我想知道為什麼第一個案例不起作用?

分解每個步驟:

  • touch ~/scratches/scr6.txt

如果文件存在,則將時間戳更新為現在。如果不存在,則創建它。

  • cat ~/scr.txt > ~/scratches/scr6.txt

讀取 ~/scr.txt 並將內容寫入 ~scratches/scr6.txt

  • cat /dev/null > ~/scr.txt

清空 ~/scr.txt 文件

如評論中所述,在命令之間使用“&&”(AND)而不是“|” (管道)會更合適。

好的,考慮到該scr.txt文件在執行命令之前包含一些文本並且scr6.txt還不存在:命令

touch ~/scratches/scr6.txt | cat ~/scr.txt > ~/scratches/scr6.txt | cat /dev/null > ~/scr.txt
  1. scr.txt文件 ( cat /dev/null > ~/scr.txt)
  2. 覆蓋( scr6.txtnothing scr.txt) ( cat ~/scr.txt > ~/scratches/scr6.txt)的內容
  3. 什麼都不做,因為scr6.txt已經存在 ( touch ~/scratches/scr6.txt)

但是下面的命令

cat ~/scr.txt > ~/scratches/scr6.txt

只是將scr.txt內容寫入scr6.txt

這就是為什麼在第一種情況下兩個文件都是空的,而在第二種情況下一切正常。

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