Shell
與重定向相關的 shell 中的執行順序如何在我的系統上的 1000 次中被擾亂約 1 次?
考慮到這個關於shell中執行順序的問答,因為它與重定向有關,儘管事實上如果一個文件不存在,它會首先創建,這樣
cat example.txt | shuf > example.txt
就不會抱怨文件不存在——這只是確認我理解的順序 - 那麼為什麼在我的系統上大約每千次洗牌在我這樣做時起作用(備份在他們的行上每個包含 15 個靜態值)for i in $(seq 1 1000); do cp backup test echo $i cat test | shuf > test cat test done
這條規則怎麼可能有例外?
這裡:
cat test | shuf > test
>
在這個意義上優先,這意味著:(cat test) | (shuf > test)
並不是:
(cat test | shuf) > test
雖然如果我們使用兩個不同的文件,無論如何這兩個分組之間不會有任何區別。
當您使用同一個文件時,重要的是管道兩側的兩個命令同時執行。這些命令是
cat test
和shuf > test
。>
表示“為寫入而打開並截斷”,而cat
將“為讀取而打開”、讀取和關閉。由於這兩件事情是同時發生的,所以它們集體操作的順序之間的關係是不確定的。有機會在 shell 管理截斷cat
文件之前將文件吞入其中。shuf > test
但這是一個很小的機會,因為涉及的更多;只有cat
在與shuf > test
. _**故事的寓意:**不要這樣做——改用兩個文件。