
「ls -l | wc -l」輸出「1+no.file/directories」(第一行多一個)。
但是,當我運行命令 ls -l | wc -l > temp(當輸出重新導向到新檔案 temp 時)。暫存檔案中儲存的值比未經重定向輸出的值多 1。我猜這是因為創建了新的“temp”文件,但臨時文件應該在運行 ls -l 命令之後創建,因此輸出應該與沒有重定向的輸出相同。
請有人幫忙
答案1
這是完全正常的行為。
發生的情況是 shell(sh、bash、csh、ksh 等)先讀取整個命令列。
然後建立進程、管道和重定向文件從右到左的順序然後才運行實際命令。
因此,重定向檔案 (temp) 是在執行 ls 命令之前建立的。
必須如此,因為在 wc 實際啟動之前,與「temp」關聯的檔案句柄需要可用作 wc 輸出的目標。
依序需要設定 wc 指令,然後才能將 ls 的輸出附加到將輸入為 wc 輸入的檔案句柄。
雖然一開始看起來有點不合邏輯,但當您了解 shell 建立命令序列的方式時,這就很有意義了。
答案2
shell 實際上temp
在開始運行命令之前創建了文件,因此您將始終看到對temp
文件進行計數。如果您不想將其計算在內,請將臨時文件放在其他位置,例如可能放在/tmp
.或只是從得到的計數中減去一。