9
votes

sortie de la queue de tuyau dans un autre script

J'essaie de piler la sortie d'une commande de la queue dans un autre script Bash pour traiter: xxx

Cependant, lorsque je l'exécute, le paramètre $ 1 (à l'intérieur du myscript.sh) jamais est atteint. Qu'est-ce que je rate? Comment pouvez-je pipeler la sortie pour être le paramètre d'entrée du script?

PS - Je veux que la queue fonctionne pour toujours et continuez à tourner chaque ligne individuelle dans le script.

Modifier Pour l'instant, tout le contenu des myscripts.sh sont les suivants: xxx


1 commentaires

Vous manquez un argument à attribuer à 1 $ . Le tuyau relie la sortie de la queue à l'entrée standard de votre script. Pouvez-vous publier myscript.sh ou au moins suffisamment pour déterminer si vous avez besoin d'un argument (et de ce que cet argument devrait être) et comment il traitera les données présentées sur son entrée standard.


3 Réponses :


18
votes

Généralement, voici une façon de gérer l'entrée standard à un script:

tail -n +1 -f your_log_file | myscript.sh foo


7 commentaires

Pas sûr de suivre. Où est-ce que foo vient de / se faire renseigner?


'FOO' est juste une chaîne arbitraire sur la ligne de commande. S'il y a une chaîne qui suit votre commande, c'est ce qui est attribué à 1 $ . S'il y a une deuxième chaîne, qui est attribué à 2 $ , etc. Dans votre exemple original, vous n'aviez eu aucun argument suivant myscript.sh , c'est pourquoi 1 $ n'avait aucune valeur.


droite - alors comment puis-je tuyer la sortie de la queue dans myscript.sh? Est-ce que je viens de l'intégrer dans myscript.sh? Si c'est le cas, comment?


Toute commande dans votre script qui se lit à partir d'une entrée standard lue à partir du tuyau. Exécutez le script d'exemple en haut de ma réponse dans un pipeline pour voir comment cela fonctionne.


Désolé d'être dense. Travaillé parfaitement quand je l'ai branché correctement!


@cheppner, pour un CAT équivalent, la boucle doit avoir écho "$ ligne" , pas echo -n "$ line" .


Cela ne fonctionne pas avec ls | awk '\ motif \' {getline; Imprimer 2} '| ./myscript.sh . Les pensées?



1
votes

Peut-être que vos ont été confondus avec awk code>?

tail -n +1 -f your_log_file | while read first junk; do
    echo "$first"
done


0 commentaires

1
votes

La tuyauterie connecte la sortie ( stdout ) d'un processus à l'entrée ( stdin ) d'un autre processus. stdin n'est pas la même chose que les arguments envoyés à un processus lorsqu'il commence.

Ce que vous voulez faire est de convertir les lignes de la sortie de votre premier processus en arguments pour le deuxième processus. C'est exactement ce que le La commande xargs est pour.

Tout ce que vous avez à faire est de pipe un xargs entre la commande initiale et il fonctionnera :

queue-n +1 -f votre_log_file | Xargs | myscript.sh


0 commentaires