Shell
當我將 ls 的輸出重定向到文件時,文件名包含在該文件中。我怎樣才能避免這種情況?
觀察:
$ ls $ ls > list $ cat list list
這似乎表明何時
ls
執行重定向到文件list
已經開始並且list
文件已經創建。無論如何,這是一個足夠好的解釋,但問題是:我怎樣才能防止這種情況發生?我期望發生的是ls
執行並將其輸出轉儲到list
其中,這就是我想要的。
正如您所注意到的,該文件是在
ls
執行之前創建的。這是由於 shell 如何處理其操作順序。為了做ls > file
shell需要創建
file
然後設置stdout指向它並最終執行ls
程序。所以你有一些選擇。
- 在另一個目錄(例如
/tmp
)中創建文件,然後mv
將其添加到最終目錄- 將其創建為隱藏文件 (
.file
) 並重命名- 用於
grep
從輸出中刪除文件- 欺騙 :-)
作弊會是這樣的
x=$(ls) ; printf "%s\n" "$x" > file
這會導致 的輸出
ls
被保存在一個變數中,然後我們將其寫出來。