Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/06/2021, à 09:27

PowaBanga

inclure les espaces dans une boucle

Salut à tous,
J'ai une liste, de ce type

"D/-\ W/-\Y"
"AEX10"
"BigBird [Mod DB]"
"Bork"
"Fenris Wolf"
"FuzzDad"
"Ghegs"
"Koobazaur"
"Liebgott"
"LoganTheRed"
"Moldiver"
"Pestilence"
"px3stick"
"snow_yoshi"
"Spite Engine"
"Verhaden"
"Wojcieszy"

Et donc je voudrais envoyer chaque ligne dans une notification.
Le souci c'est que ma boucle sépare chaque variable par un espace et non un retour à la ligne.
J'ai essayé en ajoutant les apostrophes dans mon fichier, mais rien n'y fait... sad

		for i in $(cat $HOME/.cache/liste)
		do
			notify-send "'$i' is online"
		done

si je fait un "cat $HOME/.cache/liste | sed 's/ /\\ /g'
ça m'ajoute juste un antislash dans ma notif sad

Hors ligne

#2 Le 06/06/2021, à 09:47

jplemoine

Re : inclure les espaces dans une boucle

Il faut utiliser IFS pour dire que le séparateur est le retour charriot seulement.

SAVEIFS=$IFS
IFS=$'\n'
for i in $(cat $HOME/.cache/liste)
do
  notify-send "'$i' is online"
done
IFS=$SAVEIFS

Pour faire propre, on sauvegarde la valeur et on la restaure.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 06/06/2021, à 11:43

MicP

Re : inclure les espaces dans une boucle

Bonjour

Ou alors, même sans encadrer le contenu de chaque ligne par des apostrophes :

michel@debsid:~$ cat $HOME/.cache/liste
D/-\ W/-\Y
AEX10
BigBird [Mod DB]bash
Bork
Fenris Wolf
FuzzDad
Ghegs
Koobazaur
Liebgott
LoganTheRed
Moldiver
Pestilence
px3stick
snow_yoshi
Spite Engine
Verhaden
Wojcieszy
michel@debsid:~$ 

…en utilisant la commande interne read du bash

while read; do notify-send "$REPLY is online"; done < $HOME/.cache/liste

Présenté autrement (dans un script) :

while read; do
    notify-send "$REPLY is online"
done < $HOME/.cache/liste

Dernière modification par MicP (Le 06/06/2021, à 11:51)

Hors ligne

#4 Le 06/06/2021, à 13:46

Watael

Re : inclure les espaces dans une boucle

c'est la seule vraie bonne façon de lire un fichier, en préservant les éventuels espaces et/ou tabulations au début des lignes.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne