[KSH] Qu'est-ce que çafait cette chose ?

Qu'est-ce que çafait cette chose ? [KSH] - Shell/Batch - Programmation

Marsh Posté le 19-09-2012 à 13:12:24    

Salut à tous,
 
Chuis vraiment novice en korn shell...
Quelqu'un saurait m'expliquer ce que fait la ligne suivante :
 
[ -r $0.cfg ] && . $0.cfg
 
Merci d'avance !

Reply

Marsh Posté le 19-09-2012 à 13:12:24   

Reply

Marsh Posté le 19-09-2012 à 13:44:22    

olivier911 a écrit :

Salut à tous,
 
Chuis vraiment novice en korn shell...
Quelqu'un saurait m'expliquer ce que fait la ligne suivante :
 
[ -r $0.cfg ] && . $0.cfg
 
Merci d'avance !

&&, c'est le ET binaire mais il faut l'interpréter différemment. Si le 1er champ est FAUX, on sait que le résultat est FAUX. Si le 1er champ est VRAI, il faut évaluer le second.
 
Donc, il faut comprendre la commande la façon suivante : si [ -r $0.cfg ] est vrai alors exécuter . $0.cfg
 
Ensuite :
-r : c'est pour évaluer si un fichier existe et est lisible
. : c'est demander d'exécuter un script dans le shell courant (pratique pour positionner des variables, si elles étaient exécutées dans un sous-shell, ça ne servirait à rien)
 
Ca donne donc, en français : si le fichier $0 existe et est lisible, on l'exécute dans le shell courant :)

Message cité 1 fois
Message édité par mrbebert le 19-09-2012 à 13:46:14

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 19-09-2012 à 14:45:53    

Super explication, merci, j'ai tout compris !  :)
 

Reply

Marsh Posté le 19-09-2012 à 16:07:19    

mrbebert a écrit :

-r : c'est pour évaluer si un fichier existe et est lisible
. : c'est demander d'exécuter un script dans le shell courant (pratique pour positionner des variables, si elles étaient exécutées dans un sous-shell, ça ne servirait à rien)


Et [ c'est un alias pour la commande test, qui prend des prédicats (comme -r) et quitte avec status 0 (vrai) ou 1 (faux)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 26-09-2012 à 12:48:19    

masklinn a écrit :


Et [ c'est un alias pour la commande test, qui prend des prédicats (comme -r) et quitte avec status 0 (vrai) ou 1 (faux)


 
Bon, j'ai la nette impression que mon fichier n'est pas ouvert puisque dans mon fichier se trouve par exemple VAR=CHAINE et après son ouverture VAR contient toujours la précédente chaine...
VAR est déclarée comme suit : typeset -x VAR=DEFAULT.
 
Une idée ? Une façon de rendre le truc un peu plus verbeux ?
 
Merci d'avance !  :D


Message édité par olivier911 le 26-09-2012 à 13:09:56
Reply

Marsh Posté le 04-10-2012 à 14:44:13    

Bon, toujours personne ?  :whistle:  
 
Alors reprenons...
 
Dans un fichier script ksh, j'ai :
 
typeset -x VAR=DEFAULT
 
puis plus loin :
 
[ -r $0.cfg ] && . $0.cfg (dans ce fichier en question est fait VAR=TOTO)
 
et plus loin VAR est toujours = à DEFAULT...
 
Comment faire pour que la valeur de VAR soit conservée, une fois la lecture du ficher $0.cfg terminée ?  :jap:

Reply

Marsh Posté le 04-10-2012 à 15:02:55    

chezmoicamarche :o  
 
Démonstration : 3 étapes pour le script
1/ il n'y a rien dans VAR
2/ on définit une valeur à la variable VAR
3/ on exécute le script $0.cfg qui positionne une autre valeur à VAR
 
Les scripts :

Code :
  1. $ cat /tmp/test1.ksh
  2. #!/usr/bin/ksh
  3. echo "1/ (script1) : VAR=$VAR"
  4. typeset -x VAR=DEFAULT
  5. echo "2/ (script1) : VAR=$VAR"
  6. [ -r $0.cfg ] && . $0.cfg
  7. echo "3/ (script1) : VAR=$VAR"


 

Code :
  1. $ cat /tmp/test1.ksh.cfg
  2. #!/usr/bin/ksh
  3. VAR=TOTO
  4. $


L'exécution :

Code :
  1. $ /tmp/test1.ksh
  2. 1/ (script1) : VAR=
  3. 2/ (script1) : VAR=DEFAULT
  4. 3/ (script1) : VAR=TOTO
  5. $


CQFD [:coldlake]


Message édité par mrbebert le 04-10-2012 à 15:04:23

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 04-10-2012 à 16:26:40    

Merci ! Super le détail !  :)  
 
Donc mon script << fonctionne >>, mais il faut donc que je comprenne et trouve pourquoi il ne fonctionne pas dans mon environnement...
 
Qu'est-ce qui peut bien faire que ça empêche le fonctionnement prévu, dans mon environnement ??!

Reply

Marsh Posté le 04-10-2012 à 16:49:58    

Tu es sur qu'il va bien chercher le fichier de paramétrage ? Le $0, c'est le genre à avoir des effets de bord selon que le script soit lancé directement ou en paramètre du ksh.
Si tu l'exécute directement (par ". nom_du_script" ), il te positionne bien la variable ?


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 08-10-2012 à 11:42:37    

J'ai testé : << ksh ./nom_du_script >> (et sans le << ./ >> aussi). Et VAR toujours égale à DEFAULT !  :cry:  
 
Mais qu'est-ce que c'est que cet environnement caca que j'ai !?  :heink:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed