Files
管道命令未按預期工作我需要解釋
我正在嘗試執行以下操作
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
- 空
scr.txt
文件 (cat /dev/null > ~/scr.txt
)- 覆蓋(
scr6.txt
nothingscr.txt
) (cat ~/scr.txt > ~/scratches/scr6.txt
)的內容- 什麼都不做,因為
scr6.txt
已經存在 (touch ~/scratches/scr6.txt
)但是下面的命令
cat ~/scr.txt > ~/scratches/scr6.txt
只是將
scr.txt
內容寫入scr6.txt
這就是為什麼在第一種情況下兩個文件都是空的,而在第二種情況下一切正常。