J'essaie d'exécuter la doublure ci-dessous dans le cadre du script bash.
command1 |grep -ID|grep -v + | awk "{print "command2" $2}"|bash
La première partie du tuyau affiche les informations ci-dessous:
root@system:~# command1 |grep -v ID|grep -v +
| id | name | mac_address | fixed_ips |
| 00277225-34fa-48f5-9a2a-ee5f1c5b1dcb | dummy | fa:18:3e:c4:85:94 | {"subnet_id": "0cd4d824-4420-4049-87c3-ed33c3addbf5", "ip_address": "11.170.1.121"} |
:
:
| ff9a6ed5-9694-45bc-bf71-59565f96d809 | BAT-T0-A2-0-7-tport | fa:18:3e:62:70:fb | {"subnet_id": "f9ae81ed-3b1a-45a7-96fd-c417ed32
Ainsi, $ 2 dans awk commande2 est "00277225-34fa-48f5-9a2a-ee5f1c5b1dcb". par exemple.
command2 00277225-34fa-48f5-9a2a-ee5f1c5b1dcb
Le but de cette opération est d'exécuter un certain nombre d'instances "commande2" avec des valeurs de paramètre différentes de celles imprimées ci-dessus. par exemple.
command2 00277225-34fa-48f5-9a2a-ee5f1c5b1dcb
command2 ff9a6ed5-9694-45bc-bf71-59565f96d809
:
:
Mais je ne peux pas faire reconnaître les 2 $ comme ci-dessous
command1 |grep -ID|grep -v + | awk "{print "command2" $2}"|bash
Je pense qu'il me manque quelques astuces de syntaxe ici (en tant que débutant).
p.s: Si je copie / colle toute la ligne en ligne de commande, cela fonctionne bien.
Réponses:
1 pour la réponse № 1Vous semblez chercher
command1 | awk "!/ID/ && !/+/ {print $2}" | xargs -n 1 command2
J'ai refactored le laid inutile grep
s dans le script Awk; mais le vrai boeuf est ici xargs
. Il lit les paramètres de l'entrée standard et les transmet à la commande que vous fournissez dans les paramètres de position.
L'option -n 1
dit de n'accepter qu'un argument supplémentaire à la fois; mais si command2
est une commande Unix standard bien écrite, elle peut probablement accepter un nombre arbitraire d'arguments et va simplement les parcourir en boucle. Dans ce cas, retirer -n 1
sera beaucoup plus efficace.
Incidemment, votre tentative initiale était assez proche. vous devriez avoir ajouté un espace après command2
dans le print
déclaration. Mais j'espère que cette solution vous aidera également à voir comment "penser Unix".