Saya hanya memperhatikan bahwa di salah satu mesin saya (menjalankan Debian Sid) setiap kali saya mengetik ls
nama file dengan spasi memiliki tanda kutip tunggal di sekitarnya.
Saya segera memeriksa alias saya, hanya untuk menemukan mereka utuh.
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$
Tes lain, dengan file yang berisi tanda kutip tunggal dalam namanya (juga menjawab permintaan oleh 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'
memperbarui dengan keluaran coreutils-8.26 baru (yang diakui jauh lebih membingungkan, tetapi masih menjengkelkan untuk dimiliki secara default). Terima kasih kepada Pádraig Brady untuk cetakan ini:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Mengapa ini terjadi? Bagaimana cara menghentikannya dengan benar?
untuk mengklarifikasi, saya sendiri mengatur ls untuk secara otomatis mengeluarkan warna. Itu tidak pernah menempatkan tanda kutip di sekitar hal sebelumnya.
Saya sedang menjalankan bash
dan coreutils 8.25.
EDIT: Muncul pikir pengembang coreutils (link) itu akan menjadi ide yang baik untuk membuat default global meskipun melanggar prinsip paling tidak heran serta 46 + tahun tradisi UNIX.
Adakah cara untuk memperbaikinya tanpa kompilasi ulang?
UPDATE - Oktober 2017 - Debian Sid telah mengaktifkan kembali shell escape mengutip secara default. Ini semakin konyol. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
Dan di bagian bawah rantai balasan ke laporan bug sebelumnya, "perubahan itu disengaja dan akan tetap." https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
Saya pikir ini sudah beres. Sepertinya tidak.
UPDATE: April 2019: Baru saja menemukan laporan bug yang luar biasa di PHP yang disebabkan oleh perubahan ini ls
. Saat Anda membingungkan pengembang dan membuat laporan bug palsu, inilah saatnya untuk memikirkan kembali perubahan Anda.
Pembaruan: Android toybox ls
sekarang melakukan sesuatu yang mirip dengan ini tetapi dengan garis miring terbalik bukan tanda kutip. Menggunakan opsi -q menjadikan spasi render sebagai 'karakter tanda tanya' (saya belum memeriksa apa itu, karena jelas bukan spasi), jadi satu-satunya perbaikan yang saya temukan sejauh ini tanpa me-rooting perangkat yang dimaksud adalah menambahkan ini ke skrip dan sumbernya saat meluncurkan shell. Fungsi ini ls
memanfaatkan kolom jika berada di terminal dan mencetak satu per baris, sambil menjebak ls
ke dalam ruang cetak kata demi kata karena berjalan melalui pipa.
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
}
ls
perintah.ls | cat
dan lihat apakah itu hilang. Jika saya memiliki mesin waktu, saya akan kembali ke Bell Labs ~ 1970 dan mencoba meyakinkan Ken Thompson bahwa memberi ruang pada nama file dan direktori adalah ide yang buruk. :-P'*'
. Saya kira saya akan berkeliling menambahkanls
alias ke semua mesin saya untuk menyingkirkannya ...QUOTING_STYLE=literal
daripada alias. (Saya kira ini masalah selera, tapi saya lebih suka variabelnya.)Jawaban:
Pendahuluan : Walaupun mungkin cukup memuaskan untuk memutakhirkan jawaban seperti ini dan menyebutnya sehari, yakinlah bahwa pengembang GNU tidak peduli dengan suara jawaban SO, & bahwa jika Anda benar-benar ingin mendorong mereka untuk berubah , Anda perlu kirim email kepada mereka sebagaimana dijelaskan oleh jawaban ini.
" Kenapa ini terjadi? "
Beberapa pengembang coreutils memutuskan mereka tahu lebih baik daripada dekade standar de facto.
" Bagaimana cara menghentikannya dengan benar? "
http://www.gnu.org/software/coreutils/coreutils.html :
Distro yang telah mengembalikan perubahan ini:Debian coreutils-8.25-2Termasuk secara konsekuen, mungkin, Ubuntu dan semua dari ratusan turunan berbasis Debian dan berbasis UbuntuDistro tidak terpengaruh:
" Adakah cara untuk memperbaikinya tanpa kompilasi ulang? "
Pemrakarsa menginginkan Anda ...
... pada semua instal Anda, di mana saja, selama sisa keabadian.
sumber
ls
apa yang Anda lihat tidak lagi adalah bagaimana itu disimpan. Fitur itu harus opsional, bukan standar.Anda dapat memilih gaya kutipan :
Sama seperti:
atau:
Jadikan sebagai alias, atau atur agar
export QUOTING_STYLE=literal
Anda.bashrc
mencapai perilaku pra-8.25.sumber
export QUOTING_STYLE=literal
di bashrc Anda.-N
, tampaknya. Saya hanya mengkompilasi versi saya sendiri karena saya sudah memiliki pengaturan repositori pribadi.literal
alih-alihescape
(Saya percaya bahwa @cuonglm hanya ingin menunjukkan cara mengubah gaya, tidak secara khusus menargetkanescape
gaya).Beberapa poin tentang perubahan itu.
sumber
ls
rusak? Lihatlah semua argumen yang menentang perubahan Anda. Tidak ada yang menginginkannya. Mungkin sudah waktunya untuk meminta maaf kepada dunia dan membatalkannya.