Fonction bash dont un argument contient un caractère spécial
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 :
Code:
execcmd echo '#!/bin/bash' > /tmp/toto.txt
Résultat (à l'affichage) :
rien du tout ! (car le flux est redirigé vers le fichier)
Résultat (dans le fichier) :
Code:
1 2
| $ cat /tmp/toto.txt
executing the 'echo #!/bin/bash' command... Done. |
Pour résoudre ce problème, on peut utiliser la double quote "...".
Mais dans ce cas, le symbole perd toute sa fonctionnalité dans la commande et devient une chaine de caractères ordinaire...
Exemple :
Code:
execcmd echo '#!/bin/bash' ">" /tmp/toto.txt
Résultat (à l'affichage) :
Code:
executing the 'echo #!/bin/bash > /tmp/toto.txt' command... Done.
Résultat (dans le fichier) :
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/