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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
execcmd echo '#!/bin/bash' ">" /tmp/toto.txt
Résultat (à l'affichage) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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/