Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1170 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2157225
olivier911
Posté le 19-09-2012 à 13:12:24  profilanswer
 

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 !

mood
Publicité
Posté le 19-09-2012 à 13:12:24  profilanswer
 

n°2157229
mrbebert
Posté le 19-09-2012 à 13:44:22  profilanswer
 

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.
n°2157254
olivier911
Posté le 19-09-2012 à 14:45:53  profilanswer
 

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

n°2157261
masklinn
í dag viðrar vel til loftárása
Posté le 19-09-2012 à 16:07:19  profilanswer
 

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
n°2158224
olivier911
Posté le 26-09-2012 à 12:48:19  profilanswer
 

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
n°2159126
olivier911
Posté le 04-10-2012 à 14:44:13  profilanswer
 

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:

n°2159136
mrbebert
Posté le 04-10-2012 à 15:02:55  profilanswer
 

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.
n°2159164
olivier911
Posté le 04-10-2012 à 16:26:40  profilanswer
 

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 ??!

n°2159166
mrbebert
Posté le 04-10-2012 à 16:49:58  profilanswer
 

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.
n°2159520
olivier911
Posté le 08-10-2012 à 11:42:37  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
Execution d'un script BASH à partir d'un KSH[KSH] Comment tester si un fichier est complet ?
[Résolu] [KSH] Executer plusieurs commandes dans une variableBoucle While dans un script Ksh
[KSH] [AIX] Terminaison innatendue de script[KSH] Soucis avec un tableau
[KSH] Scripts en série & pb de pathQu'est-ce qui rend le code "crushé" ?
[XML/XSL]Problème avec aply template ou autre chose 
Plus de sujets relatifs à : [KSH] Qu'est-ce que çafait cette chose ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR