Bonjour,
J'aimerai savoir si il est possible d'obtenir à partir d'une ligne de commande composée de variables d'environnements la ligne de commande correspondante après l'évaluation de ces variables.
Merci d'avance.
Bonjour,
J'aimerai savoir si il est possible d'obtenir à partir d'une ligne de commande composée de variables d'environnements la ligne de commande correspondante après l'évaluation de ces variables.
Merci d'avance.
je ne suis pas sur de comprendre la question .
la ligne de commande + les argumets peut s'obtenir via les variables automatique du shell :
$0 -> nom du shell lancé
$* -> toutes les variables passé en argument
donc
te donne ce qui a été tape sur la ligne de commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo $0 "$*"
si tu appelle un shell comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 mon_shell $USER # dans le shell echo $0 "$*" # te donne mon_shell non_du_user
non pas vraiment!
Je précise mon problème : J'ai un shell qui récupére des lignes de commandes à partir d'un fichier. Certaines de ces lignes de commande sont composées de variables d'environnement (e.g. $LD_LIBRARY_PATH). A partir de ces lignes, je souhaiterai obtenir leurs equivalents sans variables d'environnement ou autrement dit les lignes de commandes obtenu après substitution des variables d'environnements.
ex : $TOTO/ls et si TOTO=/usr/local/bin => /usr/local/bin/ls
Je ne vois pas trop pourquoi tu veux faire mais certes.
Peut etre :
AA possedera la même valeur que TOTO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 AA=`echo $TOTO` ou AA=$TOTO
Simplement je ne vois pas sauf si les variables sont "initialisés" dans ton environnement auquel cas un simple echo $variables suffit
fichier :
shell
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 commande $LS_LIBRARY autre commande $USER
si ce sont des varibales initialisé dans le fichier, il va falloir "parsé" chaque ligne pour determiner si c'est une commande ou une initialisation de variable, si c'est une initialisation, lm'initialisé dans le shell afin de pouvoir l"utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while read ligne do echo "$ligne" done < fichier
Pour pouvoir comparer des lignes de commande tout simplement et la finalité est de pouvoir identifier un programme à partir de sa ligne de commande sans passer par un identifiant déclaré.
Malheureusement, ta solution ne fonctionne pas. Dans ton cas, la variable $TOTO est évalué par le shell avant l'appel de la commande echo. Dans mon cas, il me faut forcer cette evaluation.
Bon ben je crois que je vais devoir passer par un parseur.
Merci Katyucha et MarcG
J'ai trouvé une astuce pour evaluer les variables d'environnement de mes lignes de commandes en utilisant la commande eval. Cette commande evalue les paramètres d'une ligne de commande puis l'execute. La commande suivante me permet donc d'obtenir ce que je voulais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cmd_norm=`eval "echo $cmd"`
Partager