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 10/08/2012, à 17:09

OL9245

[résolu] [débutant] problemes avec le ~ dans les scripts

Bonjour,

j'écris un script pour traiter des fichiers qui correspondent à un pattern donné.
le premier argument est le pattern des fichiers à traiter, par exemple

set '~/toto/STL_[0-9]{4}\.tiff'

Je réccupère le chemin et le nom avec :

ds=$( dirname $1 )
bs=$( basename $1 )

je veux récupérer la liste de ces fichiers pour le traiter. A la console, la commande qui va bien est (au choix) :

find ~/toto/ -regextype 'posix-extended' -regex ".*$bs"
find /home/$USER/toto/ -regextype 'posix-extended' -regex ".*$bs"

pour se concentrer sur le problème, simplifions : voila ce qui marche à la console :

find ~/toto/ 
find /home/$USER/toto/

Dans mon script, le répertoir est dans la variable $ds (cf ci-dessus) et c'est là que ça coince. rien de ce qui suit ne marche :

ds="~/toto/" ; find $ds
ds='~/toto/' ; find $ds

ceci marche car, sans les guillemets, le chemin a été interprété en /home/olivier/toto/, sauf que ça ne me sert à rien dans mon script !

ds=~/toto/ ;  find $ds

En résumé, j'ai besoin de la formule magique qui complète mon script :

set '~/toto' #point de départ obligé. C'est l'argument du script
ds=formule-magique
find $ds

Merci de votre aide. Ca fait depuis ce matin que je creuse. Là je suis au caillou !

Dernière modification par OL9245 (Le 12/08/2012, à 11:23)


La farine tombée par terre ne se ramasse pas d'une seule main (proverbe burkinabé)

Hors ligne

#2 Le 10/08/2012, à 18:40

Watael

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

salut,

le tilde n'est pas développé entre guillemets (simples ou doubles).


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

Hors ligne

#3 Le 10/08/2012, à 18:52

Sciensous

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

essaye $HOME au lieu de ~
je ne sais pas pourquoi mais ça marche mieux

ps: peux-tu me détailler l'utilisation de set ?


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

En ligne

#4 Le 10/08/2012, à 18:59

xavier4811

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

Bonjour,

si ça peut t'aider, t'a oublié une variante "  '  & ` (Alt gr+è)

:~$ echo "~/"
~/
:~$ echo '~/'
~/
:~$ echo `~/`
-bash: /home/xavier/ : est un dossier

Hors ligne

#5 Le 10/08/2012, à 19:07

Sciensous

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

xavier4811: exact, je n'avais pas trop fait attention: les ' (sous la touche 4) n'interprète pas les commandes , contrairement à "


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

En ligne

#6 Le 10/08/2012, à 19:53

OL9245

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

Merci des suggestions.
Finalement, j''ai trouvé ça qui marche :

ds=${ds/'~'/$HOME}

J'aimerai bien comprendre quand même la manière adhoc qui permet, ou pas, de développer le contenu d'une variable.
et pourquoi find, ls et compagnie acceptent comme chemin des variables commençant par /home/machin et pas par ~

@scinensous : set a b c positionne les variables $1 (=a) $2 (=b) et $3 (c).
en tête d'un script en cours de déboguage, ça permet de mettre en dur les arguments de test du script.
dans le corps d'un script, ça permet d'utiliser "for i" au lieu de "for i in truc"


La farine tombée par terre ne se ramasse pas d'une seule main (proverbe burkinabé)

Hors ligne

#7 Le 10/08/2012, à 20:25

Watael

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

une variable ($foo, $bar), ou un paramètre positionnel ($1, $2) ne sont pas développés entre guillemets simples.
le tilde (comme l'astérisque) n'est pas développé entre guillemets (simples ou doubles).
c'est tout.


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

Hors ligne

#8 Le 12/08/2012, à 11:22

OL9245

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

Merci à Watael pour l'explication.
les ~ est donc à considérer comme une espèce de variable ?

en touts cas j'ai compris :
ceci ne marche pas

ls '~' 

et ceci marche

ls '/home/olivier/'

cqft smile


La farine tombée par terre ne se ramasse pas d'une seule main (proverbe burkinabé)

Hors ligne

#9 Le 12/08/2012, à 11:44

compte supprimé

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

#10 Le 12/08/2012, à 12:39

OL9245

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

merci pour le lien.

Je l'ai déjà parcourru. C'est très touffu.

J'ai déjà pris mes repères dans Introduction à la programmation shell en bash qui est plus basic (une centaine de pages). C'était le volume que je pouvais espérer avaler plus ou moins en détail quand j'ai débuté. Son PDF est quasiment toujours ouvert dès que je bashe big_smile


La farine tombée par terre ne se ramasse pas d'une seule main (proverbe burkinabé)

Hors ligne

#11 Le 12/08/2012, à 16:23

Watael

Re : [résolu] [débutant] problemes avec le ~ dans les scripts

OL9245 a écrit :

les ~ est donc à considérer comme une espèce de variable ?

je vois ça plutôt comme un caractère spécial.
Il y a tout un paragraphe dans la page man : Développement du tilde


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

Hors ligne