Debian

為什麼’ls’突然用單引號中的空格包裹項目?

  • May 21, 2021

我剛剛注意到,在我的一台機器(執行 Debian Sid)上,每當我輸入ls任何帶空格的文件名時,都會有單引號包圍它。

我立即檢查了我的別名,卻發現它們完好無損。

wyatt@debian630:~/testdir$ ls
'test 1.txt'  test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$

(圖片)

另一個測試,文件名稱中包含單引號(也回答了 jimmij 的請求):

wyatt@debian630:~/testdir$ ls
'test 1.txt'  test1.txt  'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\'''  test1.txt
'test 1.txt'          'thishasasinglequotehere'\''.txt'

(圖片)

使用新的 coreutils-8.26 輸出進行更新(誠然,這不那麼令人困惑,但預設情況下仍然令人惱火)。感謝 Pádraig Brady 的列印輸出:

$ ls
"'test 1.txt'"   test1.txt
'test 1.txt'    "thishasasinglequotehere'.txt"

$ ls -N
'test 1.txt'  test1.txt
test 1.txt    thishasasinglequotehere'.txt

為什麼會這樣?如何正確停止它?

為了清楚起見,我自己將 ls 設置為自動顏色輸出。它只是以前從未在事物周圍加上引號。

我正在執行bashcoreutils 8.25。

有什麼方法可以在不重新編譯的情況下解決這個問題?

編輯:出現 coreutils 開發人員選擇)打破約定並將其設為全域預設值。


更新 - 2017 年 10 月 - 預設情況下,Debian Sid 重新啟用了 shell 轉義引用。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

並且在對先前錯誤報告的回复鏈的底部,“更改是故意的並且將保持不變。” https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

我以為這已經解決了,但顯然它只是恢復了,以便“穩定”的 Debian 分支可以保持其“功能凍結”,同時從較新的版本中獲取其他修復等。所以這是一種恥辱(在我看來)。

更新:2019 年 4 月:剛剛在 PHP中發現了一個由ls. 當您讓開發人員感到困惑並生成錯誤的錯誤報告時,我認為可能是時候重新評估您的更改了。

更新:Android 玩具箱ls現在正在做類似的事情,但使用反斜杠而不是引號。使用 -q 選項使空格呈現為“問號字元”(我沒有檢查它們是什麼,因為它們顯然不是空格),所以到目前為止我發現的唯一解決方法是添加這到一個腳本並在啟動 shell 時獲取它。這個函式ls在終端中使用列,否則每行列印一個,同時ls逐字列印空間,因為它是通過管道執行的。

ls() {
   # only way I can stop ls from escaping with backslashes
   if [ -t 1 ]; then
       /system/bin/ls -C $@ |cat
   else
       /system/bin/ls $@ |cat
   fi
}

前言:雖然支持這樣的答案並收工可能會非常令人滿意,但請放心,GNU coreutils 維護者並不關心 SO 答案投票,並且如果您真的想鼓勵他們改變*,您需要按照此答案的描述向他們發送電子郵件。*


2019 年更新

過去一年的某個時候,維護人員已經加倍努力,現在向任何關於此問題的 bug-coreutils@gnu.org 報告提供的只是一個樣板響應,指向他們網站上一個令人難以置信的長頁面,列出了人們在此更改中遇到的問題他們承諾無視

來自 bug-coreutils@gnu.org 報告的持續壓力顯然產生了影響,迫使生成這個巨大而荒謬的頁面,並可能將願意處理該問題的維護者數量減少到只有一個。

當這麼多人認為一個東西是錯誤時,無論維護者是否不同意,這都是一個錯誤。

繼續向他們發送電子郵件仍然是鼓勵變革的最簡單方法。


為什麼會這樣?

幾個 coreutils 維護者認為他們比幾十年的事實標準更了解。


我該如何正確地停止它?

http://www.gnu.org/software/coreutils/coreutils.html :

錯誤報告

如果您認為自己在 Coreutils 中發現了 bug,請盡可能將完整的 bug 報告發送到**<bug-coreutils@gnu.org>**,它會自動進入 Coreutils 的 bug tracker。在報告錯誤之前,請閱讀常見問題解答。關於如何編寫錯誤報告和提出好問題的一個非常有用且經常被引用的指南是文件 How To Ask Questions The Smart Way 。您可以瀏覽以前的文章並蒐索 bug-coreutils 存檔。

恢復 此更改的發行版:

發行版不受影響:

  • openSUSE (已經使用 -N)

有什麼方法可以在不重新編譯的情況下解決這個問題?

支持者會讓你…

通過將 -N 添加到他們的 ls 別名來恢復舊格式

…在您的所有安裝中,無處不在,直到永恆。

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