En el momento de escribir esto, la sintaxis de la respuesta aceptada era incorrecta para la mayoría, si no para todos, los shells derivados de Bourne, incluidos bash
. Sugerí una edición en la parte superior y acepté la respuesta para corregirlo, pero también me incliné a agregar toda esta otra información, y esto habría sido más una reescritura en lugar de una edición.
Puede usar comandos compuestos:
{ grep ...; bzgrep ...; } >file
..o subcapas (tenga en cuenta los paréntesis en lugar de llaves):
(grep ...; bzgrep ...) >file
..para agrupar los comandos. La forma de subshell tiene una sintaxis más agradable (más indulgente con la falta de espacios en blanco y le permite omitir el último punto y coma), pero bifurca un nuevo proceso o "finge" al ejecutar los comandos en un entorno limpio. Ambos tienen ventajas dependiendo de lo que quieras hacer, lo que no importa aquí, pero vale la pena buscarlo si quieres más habilidad con el shell.
Nota: También puedes usar la canalización con estos trucos, por lo que puedes hacer algo como esto:
{ grep ...; bzgrep ...; } | less
PS si no se preocupan por el orden de los partidos en su salida combinada, se podría utilizar una sola &
entre los dos comandos, así: { grep ... & bzgrep ...; }
. Luego, los dos comandos se ejecutan simultáneamente: grep
se inicia y el shell lo pone en segundo plano, luego el shell ejecutará el bzgrep
. (Pero hay una pequeña advertencia con eso, con la explicación que involucra la redirección de archivos y el almacenamiento en búfer de la secuencia de archivos que puede causar que una porción muy pequeña de las líneas en el archivo de salida se divida / destruya: si vería esto dependería de cómo grep
, bzgrep
, y las libc
stdio.h
funciones están implementadas. En la mayoría de las implementaciones, creo que canalizar el comando antes de redirigir a un archivo evitará el problema, por lo que podría hacer { foo & bar; } | cat - >file
una solución alternativa).