À l'aide de groovy, comment tuyau de multiples commandes du shell?
À l'aide de Groovy et c'est java.lang.Process
l'appui, comment puis-je canal de multiples commandes shell ensemble?
Considérer cette commande bash (et d'assumer votre nom d'utilisateur est foo
):
ps aux | grep ' foo' | awk '{print $1}'
Cela permettra d'imprimer les noms d'utilisateur - une ligne de certains processus liés à votre compte d'utilisateur.
À l'aide de Groovy, le ProcessGroovyMethods documentation et le code dit que je devrais être en mesure de le faire pour obtenir le même résultat:
def p = "ps aux".execute() | "grep ' foo'".execute() | "awk '{print $1}'".execute()
p.waitFor()
println p.text
Cependant, je ne peux pas obtenir un texte de sortie pour rien d'autre que ceci:
def p = "ps aux".execute()
p.waitFor()
println p.text
Dès que je commence à la tuyauterie, la println ne pas imprimer n'importe quoi que ce soit.
Pensées?
OriginalL'auteur Les Hazlewood | 2016-02-03
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi :
pour une raison inconnue, les paramètres de awk peut pas être envoyé avec une seule chaîne (je ne sais pas pourquoi! peut-être que bash est en citant quelque chose de différent). Si vous videz votre commande le flux d'erreur, vous verrez des erreurs par rapport à la compilation du script awk.
Modifier : En fait,
"-string-".execute()
délégué àRuntime.getRuntime().exec(-string-)
"grep ' foo'".execute()
exécuter la commande grep, avec'
comme la première paramètres, etfoo'
que la seconde : il n'est pas valide. la même pour awkor
opérateur etProcess
objets, donc je vais l'accorder. Merci!OriginalL'auteur
Vous pouvez le faire à tout simplement laisser le tri de shell:
C'est quelque chose à voir avec awk. Pas sûr de ce qu', mais il n'aime pas être de cette façon
Intéressant - la slashy approche travaillé. À l'aide de guillemets n'ont pas. Allez comprendre!
cette réponse n'est pas faux.. mais il n'a pas à répondre à la question initiale : comment utiliser l'opérateur | entre les Processus de l'objet en groovy. vous exécuter une seule commande par le biais de bash, et c'est bash qui pipe les processus, pas groovy
yep, je pense que c'est lié à awk ou imbriquée entre guillemets simples. À l'aide d'un slashy chaîne résolu le problème pour moi, donc je crois que je vais l'utiliser que d'aller de l'avant. Malheureusement, la question sur Groovy de la tuyauterie reste :/
OriginalL'auteur
Ce qui a fonctionné pour moi
Si vous voulez exécuter plusieurs commandes, vous pouvez l'ajouter dans la commande.
OriginalL'auteur
Si vous le souhaitez async je recommande
OriginalL'auteur