GNU/Linux >> Belajar Linux >  >> Debian

Debian – Mengapa 'ls' Tiba-tiba Membungkus Item Dengan Spasi Dalam Satu Kutipan?

Saya baru menyadarinya di salah satu mesin saya (menjalankan Debian Sid) setiap kali saya mengetik ls nama file apa pun dengan spasi memiliki tanda kutip tunggal di sekitarnya.

Saya segera memeriksa alias saya, hanya untuk menemukan mereka utuh.

[email protected]:~/testdir$ ls
'test 1.txt'  test1.txt
[email protected]:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
[email protected]:~/testdir$

(gambar)

Tes lain, dengan file yang berisi tanda kutip tunggal dalam namanya (juga menjawab permintaan jimmij):

[email protected]:~/testdir$ ls
'test 1.txt'  test1.txt  'thishasasinglequotehere'''.txt'
[email protected]:~/testdir$ touch "'test 1.txt'"
[email protected]:~/testdir$ ls
''''test 1.txt''''  test1.txt
'test 1.txt'          'thishasasinglequotehere'''.txt'

(gambar)

perbarui dengan keluaran coreutils-8.26 baru (yang memang tidak terlalu 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 memperjelas, saya sendiri mengatur ls untuk secara otomatis mewarnai output. Itu tidak pernah menempatkan tanda kutip di sekitar hal-hal sebelumnya.

Saya menjalankan bash dan coreutils 8.25.

EDIT:
Tampaknya pengembang coreutils berpikir (tautan) adalah ide yang baik untuk menjadikannya sebagai default global meskipun melanggar prinsip paling tidak mengherankan serta 46+ tahun tradisi UNIX.

Adakah cara untuk memperbaikinya tanpa kompilasi ulang?

UPDATE – Oktober 2017 – Debian Sid telah mengaktifkan kembali shell escape quoting 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 ada.” https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Saya pikir ini diselesaikan. Ternyata tidak.

PEMBARUAN:April 2019:Baru saja menemukan laporan bug palsu di PHP yang disebabkan oleh perubahan ls ini . Saat Anda membingungkan pengembang dan membuat laporan bug palsu, inilah saatnya untuk memikirkan kembali perubahan Anda.

Pembaruan:Kotak mainan Android ls sekarang melakukan sesuatu yang mirip dengan ini tetapi dengan garis miring terbalik alih-alih tanda kutip. Menggunakan opsi -q membuat spasi dirender 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 membuat ls gunakan kolom jika di terminal dan sebaliknya cetak satu per baris, sambil menipu ls ke ruang pencetakan kata demi kata karena dijalankan melalui pipa.

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

Jawaban yang Diterima:

Pengantar :Meskipun mungkin cukup memuaskan untuk meningkatkan jawaban seperti ini dan menyebutnya sehari, yakinlah bahwa pengelola coreutils GNU tidak peduli dengan suara jawaban SO, &bahwa jika Anda benar-benar menginginkannya untuk mendorong mereka berubah , Anda perlu mengirim email kepada mereka seperti yang dijelaskan oleh jawaban ini.

Pembaruan 2019 :
Beberapa tahun terakhir ini, pengelola telah berlipat ganda dan sekarang menawarkan kepada semua laporan [dilindungi email] tentang masalah ini hanya respons boilerplate yang menunjuk ke halaman yang sangat panjang di situs web mereka yang mencantumkan masalah yang dialami orang-orang dengan perubahan ini bahwa mereka telah berkomitmen untuk mengabaikannya.
Tekanan tak henti-hentinya dari laporan [dilindungi email] jelas berdampak, memaksa pembuatan halaman yang sangat besar &absurd ini, dan berpotensi mengurangi jumlah pengelola yang bersedia menangani masalah menjadi hanya satu.
Ketika banyak orang menganggap suatu hal sebagai bug, maka itu adalah bug terlepas dari apakah pengelola tidak setuju atau tidak.
Melanjutkan mengirim email kepada mereka tetap menjadi cara paling sederhana untuk mendorong perubahan.

Mengapa ini terjadi?

Terkait:Membaca terus menerus dari pipa bernama (cat atau tail -f)?

Beberapa pengelola coreutils memutuskan bahwa mereka tahu lebih baik daripada dekade standar de facto.

Bagaimana cara menghentikannya dengan benar?

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

Laporan Bug

Jika Anda merasa telah menemukan bug di Coreutils, kirimkan sebagai
lengkapi laporan bug ke <[email protected]> , dan itu
akan secara otomatis dimasukkan ke pelacak bug Coreutils. Sebelum
melaporkan bug, harap baca FAQ. Panduan
yang sangat berguna dan sering dirujuk tentang cara menulis laporan bug dan mengajukan pertanyaan yang baik adalah dokumen
Cara Mengajukan Pertanyaan Cara Cerdas . Anda dapat menelusuri postingan
sebelumnya dan menelusuri arsip bug-coreutils.

Distro yang telah kembalikan perubahan ini:

  • Debian coreutils-8.25-2
    • Termasuk akibatnya, mungkin, Ubuntu dan semua dari ratusan turunan berbasis Debian dan berbasis Ubuntu

Distro tidak terpengaruh:

  • openSUSE (sudah menggunakan -N)

Adakah cara untuk memperbaikinya tanpa kompilasi ulang?

Para pendukung menginginkan Anda…

kembali ke format lama dengan menambahkan -N ke alias ls mereka

…pada semua pemasangan Anda, di mana pun, selama sisa kekekalan.


Debian
  1. perintah bash alias dengan tanda kutip tunggal dan ganda

  2. Masalah dengan variabel bash berkembang dengan tanda kutip tunggal

  3. sed ganti semua tab dan spasi dengan satu spasi

  1. Cara Mencadangkan Database MySQL Dengan mylvmbackup Di Debian Squeeze

  2. Amankan Debian dengan Antivirus ClamAV

  3. Mengapa Garis Miring Balik Tunggal Ditampilkan Saat Menggunakan Kutipan?

  1. Cara Mengatur Firewall dengan UFW di Debian 10

  2. Cara Mengatur Firewall dengan UFW di Debian 9

  3. Bagaimana cara mengganti tanda kutip tunggal dengan karakter lain di sed?