Tuyez la sortie de deux commandes en une

4

Est-il possible dans unix / bash de canaliser la sortie de deux commandes dans une autre?

J'ai essayé d'exécuter la commande suivante, qui a réussi à exécuter les deux commandes, mais la première était transmise à stdout et la seconde à lessive.

$ grep 40515575 * && zgrep 40515575 * | less
Svish
la source
2
Vous pouvez regrouper les commandes: { grep 40515575 * && zgrep 40515575 *; } | less. BTW, il semble que vous voulez plutôt:{ grep 40515575 *; zgrep 40515575 *; } | less
devnull
@devnull Comment votre méthode de edvinas.me {}et ;celle-ci répondent-elles? Ou est-ce juste deux manières différentes de dire la même chose?
Svish
4
Le groupement des commandes ne crée pas de sous-shell contrairement à say ( command ). Deuxièmement, command1 && command2implique que command2ne serait exécuté que s'il était command1quitté avec un code de retour de 0. D'autre part, command1; command2;implique que les deux commandes seraient exécutées.
devnull

Réponses:

4

Essayez ceci à la place:

$ ( grep 40515575 * && zgrep 40515575 * ) | less
phoops
la source
On dirait que ça a marché!
Jeudi
1
Je préfère la solution @devnull: { grep 40515575 *; zgrep 40515575 *; } | lesscar il n'a pas besoin d'appeler un sous-shell, et il fait toujours les deux grep (même si le premier n'a trouvé "40515575" dans aucun des fichiers). Les vôtres (et les OP) rateraient tout "40515575" s'ils ne sont présents que dans des fichiers compressés, et non des fichiers normaux, car le premier grep renverrait alors "faux".
Olivier Dulac
Changer &&avec ||permettrait de résoudre l'un des problèmes, n'est-ce pas? Quoi qu'il en soit, aucune idée de ce qu'est un sous-shell ou pourquoi je devrais l'éviter ...: p
Svish
@Svish: grep 40515575 * && zgrep 40515575 *exécute la deuxième commande ( zgrep) UNIQUEMENT si la première réussit (c'est-à-dire trouve quelque chose). D'autre part grep 40515575 * || zgrep 40515575 *exécute la deuxième commande SEULEMENT si la première échoue (ie ne trouve rien). Si vous voulez que la deuxième commande soit exécutée avec succès ou non, utilisez un point-virgule.
Gordon Davisson
0

Selon le système, vous pouvez constater que «moins» est capable de reconnaître plusieurs types de fichiers différents, tels que les fichiers compressés gzip et bzip2.

Peut-être que ce que vous voulez vraiment dire est ceci:

less * | grep 40515575 | less

Il est utile de rappeler que dans ce cas, le "moins" initial se comporte comme un "chat", car sa sortie n’est pas destinée à un ATS.

Cameron Kerr
la source