GNU/Linux >> Tutoriels Linux >  >> Debian

Debian – Pourquoi « ls » enveloppe-t-il soudainement des éléments avec des espaces entre guillemets simples ?

Je viens de remarquer que sur l'une de mes machines (exécutant Debian Sid) chaque fois que je tape ls tout nom de fichier avec des espaces est entouré de guillemets simples.

J'ai immédiatement vérifié mes alias, seulement pour les trouver intacts.

[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$

(image)

Autre test, avec des fichiers contenant des guillemets simples dans leurs noms (répondant également à une requête de 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'

(image)

mise à jour avec la nouvelle sortie coreutils-8.26 (ce qui est certes beaucoup moins déroutant, mais toujours irritant d'avoir par défaut). Merci à Pádraig Brady pour cette impression :

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

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

Pourquoi cela arrive-t-il? Comment puis-je l'arrêter correctement ?

pour clarifier, j'ai moi-même défini ls pour colorer automatiquement la sortie. Il n'a jamais mis de guillemets autour des choses avant.

J'utilise bash et coreutils 8.25.

EDIT :
Il semble que les développeurs de coreutils pensaient (lien) que ce serait une bonne idée d'en faire une valeur globale par défaut malgré la rupture du principe du moindre étonnement ainsi que plus de 46 ans de tradition UNIX.

Un moyen de résoudre ce problème sans recompiler ?

MISE À JOUR – Octobre 2017 – Debian Sid a réactivé la citation d'échappement du shell par défaut. Cela devient juste ridicule. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582

Et au bas de la chaîne de réponse au rapport de bogue précédent, "le changement était intentionnel et restera". https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226

Je pensais que c'était réglé. Apparemment non.

MISE À JOUR :avril 2019 : Je viens de trouver un faux rapport de bogue dans PHP causé par cette modification de ls . Lorsque vous embrouillez les développeurs et générez de faux rapports de bugs, il est temps de repenser vos modifications.

Mise à jour :Boîte à jouets Android ls fait maintenant quelque chose de similaire mais avec des barres obliques inverses au lieu de guillemets. L'utilisation de l'option -q rend les espaces en tant que 'caractères de point d'interrogation' (je n'ai pas vérifié ce qu'ils sont, car ce ne sont évidemment pas des espaces), donc le seul correctif que j'ai trouvé jusqu'à présent sans rooter le périphérique en question est d'ajouter this à un script et sourcez-le lors du lancement d'un shell. Cette fonction fait ls utiliser des colonnes si dans un terminal et sinon imprimer une par ligne, tout en trompant ls dans les espaces d'impression textuellement parce qu'il traverse un tuyau.

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
}

Réponse acceptée :

Préface  :Bien qu'il puisse être assez satisfaisant de voter pour une réponse comme celle-ci et de l'appeler un jour, soyez assuré que les responsables de GNU coreutils ne se soucient pas des votes de réponse SO, et que si vous le souhaitez réellement pour les encourager à changer , vous devez leur envoyer un e-mail comme décrit dans cette réponse.

Mise à jour 2019 :
Au cours de l'année écoulée, les mainteneurs ont redoublé d'efforts et n'offrent désormais à tous les rapports [protégés par e-mail] sur ce problème qu'une réponse passe-partout pointant vers une page incroyablement longue sur leur site Web répertoriant les problèmes rencontrés par les utilisateurs avec ce changement. qu'ils se sont engagés à ignorer.
La pression incessante des rapports [email protected] a clairement eu un effet, forçant la génération de cette page immense et absurde, et réduisant potentiellement le nombre de mainteneurs prêts à traiter le problème à un seul.
Quand autant de personnes considèrent qu'une chose est un bogue, alors c'est un bogue, que les responsables soient en désaccord ou non.
Continuer à leur envoyer des e-mails reste le moyen le plus simple d'encourager le changement.

"Pourquoi cela se passe-t-il ?

Connexe :lecture continue à partir d'un tube nommé (chat ou queue -f) ?

Plusieurs mainteneurs de coreutils ont décidé qu'ils savaient mieux que des décennies de normes de facto.

"Comment puis-je l'arrêter correctement ?

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

Rapports de bogues

Si vous pensez avoir trouvé un bogue dans Coreutils, veuillez envoyer
un rapport de bogue aussi complet que possible à <[email protected]> , et il
sera automatiquement saisi dans le gestionnaire de bogues de Coreutils. Avant
de signaler des bogues, veuillez lire la FAQ. Un guide très utile et souvent référencé
sur la façon de rédiger des rapports de bogues et de poser de bonnes questions est le
document How To Ask Questions The Smart Way . Vous pouvez parcourir les messages
précédents et rechercher dans l'archive bug-coreutils.

Distros qui ont déjà été inversées ce changement :

  • Debian coreutils-8.25-2
    • Y compris par conséquent, vraisemblablement, Ubuntu et tous les centaines de dérivés basés sur Debian et Ubuntu

Distributions non affectées :

  • openSUSE (déjà utilisé -N)

"Un moyen de résoudre ce problème sans recompiler ?

Les promoteurs voudraient que vous…

revenir à l'ancien format en ajoutant -N à leur alias ls

…sur toutes vos installations, partout, pour le reste de l'éternité.


Debian
  1. Comment sauvegarder des bases de données MySQL avec mylvmbackup sur Debian Squeeze

  2. Sécuriser Debian avec ClamAV Antivirus

  3. Pourquoi une seule barre oblique inversée s'affiche-t-elle lors de l'utilisation de guillemets ?

  4. Commande bash alias avec guillemets simples et doubles

  5. Problèmes avec l'expansion de la variable bash avec des guillemets simples

Chrooter Apache 2.4 avec mod_unixd sur Debian 8 (Jessie)

Installer WordPress 5 avec Apache sur Debian 9

Comment installer Debian 11 (Bullseye) avec des captures d'écran

Configuration initiale du serveur avec Debian 11

Comment configurer LAMP avec Debian 11

Comment configurer le serveur Samba avec Debian 11