Tuyauterie à la substitution de command d'une string contenant des tuyaux

Cela marche-

$ x='grep a' $ echo ab | $x ab 

Ce n'est pas …

 $ x='grep a | grep b' $ echo ab | $x grep: |: No such file or directory grep: grep: No such file or directory grep: b: No such file or directory 

Il apparaît dans ce dernier cas, grep a | grep b grep a | grep b est vu comme une seule command, ie grep a \| grep b grep a \| grep b .

Comment get le deuxième exemple sans modifier x ?

Lorsque vous voulez exécuter des variables contenant du code, vous souhaiterez souvent utiliser la command eval . Cela va étendre le contenu de la variable afin qu'ils puissent être exécutés.

Exemple

 $ x='grep a | grep b' $ echo ab | eval $x ab 

L'utilisation d'eval est souvent déconseillée, alors faites attention, voyez ce BashFAQ intitulé: La command Eval et les problèmes de security pour plus d'exemples!

Les references

  • Exécution d'une command dans une variable avec eval

Ah, je l'ai compris après quelques expérimentations- alias utilisation –

 $ x='grep a | grep b' $ alias y=$x $ echo ab | y ab 

S'il vous plaît, postz d'autres façons de le faire-je serais intéressé par des alternatives.