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 | 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 menambahkan ls
alias ke semua mesin saya untuk menyingkirkannya ...
QUOTING_STYLE=literal
daripada alias. (Saya kira ini masalah selera, tapi saya lebih suka variabelnya.)
ls
perintah.