dmesg.fr:~#

display message

La commande eval sous Linux

Terminal linuxSuite à de nombreuses demandes, voici un article illustrant de façon simple le fonctionnement de la commande Linux eval.


Soit le script suivant :

#!/bin/bash
# Test eval

commande="ls -l | grep toto"

touch toto

echo -e "\ncommande : $commande"

echo -e "\ncommande sans eval :"

$commande

echo -e "\ncommande avec eval :"

eval $commande



Explications

Dans le script ci-dessus, on affecte  "ls -l | grep toto" à la variable "commande", puis on créé un fichier toto. Le but est de retrouver le fichier toto avec la commande "ls -l | grep toto".

Voici le résultat de l'exécution du script :

commande : ls -l | grep toto

commande sans eval :

ls: impossible d'accéder à |: Aucun fichier ou dossier de ce type
ls: impossible d'accéder à grep: Aucun fichier ou dossier de ce type
-rw-r--r-- 1 td td 0 oct.  12 09:49 toto

commande avec eval :

-rw-r--r-- 1 td td    0 oct.  12 09:49 toto


En lançant simplement $commande, le shell comprend qu'il doit exécuter ceci :

ls -l |
ls -l grep
ls -l toto


En lançant eval $commande, le shell sait qu'il doit évaluer l'ensemble de la commande avec de l'exécuter, et comprend ceci :

ls -l | grep toto


C'est donc bien eval $commande qu'il faut utiliser dans notre cas, puisque nous voulons que le shell interprète l'ensemble de la commande avec le pipe.


J'espère que cette explication simple pourra vous servir :-)


Copyright dmesg.fr - All Rights Reserved.