12
votes

Utilisation de la sortie des commandes précédentes dans Bash

dans Mathematica, il est possible de réutiliser la sortie de la commande précédente en utilisant%.

est quelque chose de similaire possible pour bash (ou une autre coquille)?

Par exemple, je gère un Faites qui donne des avertissements, mais je veux trouver tous les avertissements. Donc, je tape xxx

mais je ne peux pas voir la sortie de la marque alors.

Je voudrais taper quelque chose comme ça : xxx


0 commentaires

5 Réponses :


14
votes

Étant donné que la quantité de sortie est indéterminée, elle n'a pas de sens pour bash pour la stocker pour vous pour réafficher. Mais il y a une solution alternative à votre problème:

La commande tee vous permet de dupliquer un flux de sortie à un fichier. Donc, si vous êtes prêt à utiliser un fichier de stockage temporaire, vous pouvez faire quelque chose comme ceci: xxx

Cette solution évite d'exécuter faire deux fois, qui pourrait être (a) coûteux et (b) incohérent: la deuxième marque peut faire moins de travail que le premier parce que certaines cibles étaient déjà effectuées la première fois.

Note: je n'ai pas essayé cela . Vous devrez peut-être vouloir jouer avec rejoindre les flux d'erreur et de sortie, ouc.


1 commentaires

Droit. Il n'a pas de sens à stocker toute la sortie. La commande TEE semble utile cependant. Et je l'ai essayé. Fonctionne parfaitement. Merci.



2
votes

Je ne sais pas si la commande marque envoie des avertissements à stards mais je soupçonne que cela fait. Essayez ceci xxx

il redirigera starr to stdout.

devrait également noter que vous ne pouvez pas grep quelque chose qui ne va pas sur stdout.


0 commentaires

2
votes

Si vous utilisez TEE pour dupliquer le flux de sortie vers / dev / stadr, il n'y a pas besoin de fichier temporaire; De plus, après cela, vous pouvez filtrer le flux STDOUT avec SED pour créer un fichier make_warning.log - tout dans une ligne de tuyaux de coque UNIX.

make 2>&1 | tee /dev/stderr | \
   sed -E -n 's/(.*[Ww][Aa][Rr][Nn][Ii][Nn][Gg].*)/\1/p' > make_warning.log


0 commentaires

3
votes

Swap the stdout code> et STDERR code> Pour enregistrer l'ensemble de l'ensemble starr code> flux:

make 3>&2 2>&1 1>&3 3>&- | tee /dev/stderr > stderr.log


0 commentaires

4
votes

vous pouvez faire ceci: xxx

à l'aide de !! Vous le direz de répéter la dernière commande à cet endroit, ainsi que de toutes les autres commandes Bash que vous souhaitez. Pour ajouter à celui-ci.

L'inconvénient est que si la commande que vous répétez prend beaucoup de temps à exécuter, vous aurez beaucoup plus de temps à attendre que si vous avez stocké la sortie de la commande précédente à une sortie. Fichier d'abord.


0 commentaires