2010-12-22 30 views
7
$ echo "" > /home/jem/rep_0[1-3]/logs/SystemOut.log 
bash: /home/jem/rep_0[1-3]/logs/SystemOut.log: ambiguous redirect 

¿Puedo redirigir a varios archivos a la vez?Bash ambiguo redirigir - redirigir a varios archivos

Editar: ¿Alguna respuesta que permite el uso de la referencia de archivo ambiguo?

Respuesta

16

Eso es lo que camiseta está para:

command | tee file1 file2 file3 > file4 

camiseta da salida también a la salida estándar, por lo que es posible que desee ya sea para poner un archivo después de una redirección (como se muestra arriba), o enviar a la salida estándar /dev/null.

para su caso:

echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log >/dev/null 
0

No. ¿Qué acerca del uso de tee dos veces?

echo "Your text" | tee file1 | tee file2 > file3 
+0

Thanks. Olvidé especificar que quería usar la referencia del archivo comodín. – Synesso

+0

Luego vea la respuesta de Laurence. – Robert

+1

Puede especificar múltiples argumentos para 'tee'. No necesita ejecutarlo dos veces. –

0

Tubería a la orden de "T" en rama en un archivo y std a cabo, la cascada de comandos de la camiseta

+0

Gracias. Olvidé especificar que quería usar la referencia del archivo comodín. – Synesso

+1

Puede especificar múltiples argumentos para 'tee' en lugar de ponerlos en cascada. –

5

Usted puede hacer esto utilizando tee, que se lee de la entrada estándar y escribe en la salida estándar y archivos. Dado que tee también da salida a stdout, he decidido dirigir su salida a /dev/null. Tenga en cuenta que la expansión de bash coincide con los archivos existentes, por lo que los archivos en los que intenta escribir deben existir antes de ejecutar este comando para que funcione.

$ echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log > /dev/null 

Como nota al margen, el "" se pasa a echo es redundante.

No es directamente relevante para su pregunta, pero si no confía en la expansión de bash, puede tener varias tuberías.

$ echo hello > foo > bar > baz 
$ cat foo bar baz 
hello 
hello 
hello 
1

Usted puede hacer esto:

echo "" | tee /home/jem/rep_0{1..3}/logs/SystemOut.log 

para suprimir la salida a la salida estándar, añadir esto a finales de los comandos anteriores:

> /dev/null 

El comando echo en su pregunta (que no requiere las comillas vacías) simplemente pone una nueva línea en los archivos. Si desea crear archivos vacíos, use el comando touch.

+0

No solo pone, sobrescribe los contenidos con una nueva línea. –

1

Tuve la misma pregunta y solo quería agregar el ejemplo con el comodín porque no se había mostrado. Creo que esto es lo que estabas buscando:

echo "" | tee *.log 
+0

exactamente lo que necesito, perfecto. – PoweredByRice