#1 Le 15/07/2021, à 21:24
- manup31
Substitution des espaces dans une variable
Bonjour,
Je souhaite, dans un bash, pouvoir lancer nautilus pour qu'il s'ouvre sur un dossier nommé.
Dans le nom du dossier il y a (au moins) un espace.
Le nom du dossier est calculé, et la variable dir le désigne.
Par exemple, on peut avoir dir valant "/home/user/dossier test".
Dans le script, la commande nautilus "$dir" ne fonctionne pas, provoque une erreur (Oups ! Quelque chose s'est mal passé, etc.)
Je pense à remplacer le(s) espace(s) dans dir par "\ ", et j'ai trouvé la syntaxe ${dir// /\\ }. Encore plus court qu'un echo $dir | sed 's/ /\\ /g'
echo ${dir// /\\ } affiche bien /home/user/dossier\ test
Mais ls "${dir// /\\ }" répond :
ls: impossible d'accéder à '/home/user/dossier\ test': Aucun fichier ou dossier de ce type
alors que ls /home/user/dossier\ test ne renvoie pas d'erreur...
Et bien sûr, nautilus "${dir// /\\ }" s'excuse d'un Oups ! Quelque chose s'est mal passé.
Comment s'en sortir ?
manu'
Hors ligne
#2 Le 15/07/2021, à 21:27
- jplemoine
Re : Substitution des espaces dans une variable
A tester mais normalement, il suffit d'entourer la variable avec des ".
ls "nom avec espaces" devrait fonctionner.
Donc
dummy=$(ls \"$dir\")
--> devrait fonctionner
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#3 Le 15/07/2021, à 21:34
- manup31
Re : Substitution des espaces dans une variable
Merci @jplemoine pour l'intérêt porté à ma question.
Voilà l'output (manu a remplacé user par rapport à l'exemple précédent)
$ echo $dir
/home/manu/dossier test
$ dummy=$(ls \"$dir\")
ls: impossible d'accéder à '"/home/manu/dossier': Aucun fichier ou dossier de ce type
ls: impossible d'accéder à 'test"': Aucun fichier ou dossier de ce type
$ file /home/manu/dossier\ test
/home/manu/dossier test: directory
manu'
Hors ligne
#4 Le 15/07/2021, à 22:46
- kamaris
Re : Substitution des espaces dans une variable
Du point de vue shell, la commande nautilus "$dir" est correcte et gère correctement les espaces, donc le problème vient d'ailleurs.
Il faudrait voir plus précisément ce que dit Nautilus dans son message d'erreur.
Hors ligne
#5 Le 15/07/2021, à 23:35
- MicP
Re : Substitution des espaces dans une variable
Bonjour
Si le chemin absolu "/home/manu/dossier test" existe
il est fort possible que le chemin relatif \"/home/manu/dossier test\" n'existe pas
car en échappant les caractères apostrophe, ils finissent par faire partie du nom de fichier :
Pour le constater, essaye et compare les sorties de :
ls "/home/manu/dossier test"
et
ls \"/home/manu/dossier test\"
=======
Donc, change la ligne :
dummy=$(ls \"$dir\")
par :
dummy=$(ls "$dir")
=======
mais de toutes façons, utiliser le retour de la commande ls dans un script n'est pas une chose à faire,
il vaudrait mieux utiliser un tableau :
dummy=( "$dir"/* )
et adapter la suite du script en tenant compte du fait que la variable dummy sera maintenant
un tableau de chaînes de caractères dont chaque élément du tableau sera un des noms de fichier ou répertoire qui existe dans le répertoire /home/manu/dossier test
et ne sera donc plus une seule chaîne de caractères (dont il pourrait être difficile d'extraire les noms de chaque fichier ou répertoire)
Dernière modification par MicP (Le 16/07/2021, à 02:23)
Hors ligne