Bonjour,
J'ai déjà ouvert une discussion [1] concernant une fonction bash appelée "execcmd" qui :
- affiche le nom de la commande à lancer
- lance la commande
- affiche un message pour dire si la commande a réussi ou échoué
La solution qui ne fonctionne pas est de stocker la commande à lancer dans une variable. Puis d'exécuter la commande à l'aide de cette variable.
La solution qui fonctionne est de stocker la commande à lancer dans les paramètres de la fonction. Puis d'exécuter la commande à l'aide de "$@".
Mais j'ai remarqué un problème lorsque l'on souhaite passer une commande qui contient des caractères spéciaux comme le ">", ">>" ou encore le "|".
Dans ce cas, ces caractères ne sont pas considérés comme des arguments de la fonction.
Exemple :
Résultat (à l'affichage) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part execcmd echo '#!/bin/bash' > /tmp/toto.txt
rien du tout ! (car le flux est redirigé vers le fichier)
Résultat (dans le fichier) :
Pour résoudre ce problème, on peut utiliser la double quote "...".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ cat /tmp/toto.txt executing the 'echo #!/bin/bash' command... Done.
Mais dans ce cas, le symbole perd toute sa fonctionnalité dans la commande et devient une chaine de caractères ordinaire...
Exemple :
Résultat (à l'affichage) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part execcmd echo '#!/bin/bash' ">" /tmp/toto.txt
Résultat (dans le fichier) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part executing the 'echo #!/bin/bash > /tmp/toto.txt' command... Done.
le fichier /tmp/toto.txt n'existe pas !
Est-ce que vous voyez une solution pour que la commande passée en arguments à la fonction soit prise en compte correctement ?
Merci.
[1] http://www.developpez.net/forums/d12...s-script-bash/
Partager