Shell

當我將 ls 的輸出重定向到文件時,文件名包含在該文件中。我怎樣才能避免這種情況?

  • April 4, 2022

觀察:

$ ls
$ ls > list
$ cat list
list

這似乎表明何時ls執行重定向到文件list已經開始並且list文件已經創建。無論如何,這是一個足夠好的解釋,但問題是:我怎樣才能防止這種情況發生?我期望發生的是ls執行並將其輸出轉儲到list其中,這就是我想要的。

正如您所注意到的,該文件是在ls執行之前創建的。這是由於 shell 如何處理其操作順序。為了做

ls > file

shell需要創建 file然後設置stdout指向它並最終執行ls程序。

所以你有一些選擇。

  1. 在另一個目錄(例如/tmp)中創建文件,然後mv將其添加到最終目錄
  2. 將其創建為隱藏文件 ( .file) 並重命名
  3. 用於grep從輸出中刪除文件
  4. 欺騙 :-)

作弊會是這樣的

x=$(ls) ; printf "%s\n" "$x" > file

這會導致 的輸出ls被保存在一個變數中,然後我們將其寫出來。

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