Bash, c’est puissant, mais parfois, ça fait chier pour pas grand chose

closeCet article a été publié il y a 8 ans 5 mois 27 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Un autre titre aurait été « Comment des guillemets (ou leur absence) peuvent vous pourrir la vie« , ça aurait été pareil. En ce dimanche 2à Septembre où je commence à écrire ce billet, lendemain d’une soirée particulièrement riche en évènements, je découvre dans mon fil Twitter un appel à l’aide datant de deux jours, sur un problème en Bash. Quoi de mieux pour dé-saouler que de s’y mettre ?

Décrivons le symptôme

Lorsqu’on fait une recherche avec find, il affiche chaque résultat sur une ligne différente :

Jusqu’à ce qu’on essaie de stocker ces résultats dans une variable, dans laquelle ils se retrouvent alors tous collés les uns à la suite des autres :

Et mine de rien, remettre ça sur plusieurs lignes, c’est pas facile, surtout un dimanche matin.

Tentatives râtées

sed, awk, rien n’y fait, soit je vide la ligne, ce qui est très con, soit ça change rien. Et surtout, si par malheur il y a des espaces dans les noms de dossiers (hein les Windowsiens…), ben on risque de casser encore plus le truc. Sans parler du fait qu’avec sed vous risquez de modifier le contenu du fichier plutôt que mettre en forme son nom. Pas top.

Une solution tellement simple qu’on y pensera jamais

C’est en essayant les différentes méthodes pour stocker le contenu des variables que la solution s’est présentée à moi. Reprenons la méthode habituelle pour le stockage de résultat :

Première étape, on rajoute simplement des guillemets autour :

Et donc pour l’affichage, on rajoute là aussi des guillemets :

Presque vingt minutes quand même pour loger ça. Moralité, pas nécessairement besoin de chercher à faire compliqué, la solution peut parfois être très simple. Et en plus ça m’a évité une balade dans une brocante alors que la dernière chose que j’avais envie de faire était de faire fonctionner mes jambes 😀

5 Commentaires
Le plus ancien
Le plus récent
Commentaires en ligne
Afficher tous les commentaires
Djerfy
02/10/2015 18:03

Ou avec un truc bien crade aussi :

result=$(find . -type d); echo $result | tr  »  » « n »

😀

Maxence Maireaux
02/10/2015 18:52
Répondre à  Djerfy

Bizzare exactement ce que j’allais dire … Tu m’a vraiment appris des trucs pas propres xD

Krapace
Krapace
02/10/2015 20:33

Comme quoi les trucs de base c’est parfois trop simple pour etre pensé. Et desolé de t’avoir « imposé » ca un dimanche matin >_<