2012-04-17 7 views
7

Hace poco encontré un comando shell que se veía así: "cat> archivo_salida < infile", que parece ser funcionalmente equivalente a "gato infile> archivo de salida". Para el caso, la forma general parece ser "> archivo de salida < comando de archivo arg1 ... argN" se convierte en "comando arg1 ... argN infile> archivo de salida".Shell de comandos que empiezan por ">"

De todos modos, me preguntaba si alguien podría explicar de qué forma el principal ">" logra este efecto, y si hay algún uso práctico para él.

+0

¿Por qué ha bajado este valor? Es una buena pregunta. – Aatch

Respuesta

6

El "Bash Reference Manual" dice lo siguiente acerca de los operadores de redirección:

Los siguientes operadores de redirección pueden preceder o aparecer en cualquier lugar dentro de un simple comando o pueden seguir una orden.

Así los comandos siguientes son equivalentes:

ls -al > listing.txt 
> listing.txt ls -al 
ls > listing.txt -al 

Aunque supongo que la primera es la forma más común.

Tenga en cuenta que la relación fin de redirecciones es significativa, por lo que si usted está redirigiendo un descriptor de archivo a otro, por ejemplo, lo siguiente sería diferente:

ls > listing.txt 2>&1 # both stdout and stderr go in to listing.txt 

ls 2>&1 > listing.txt # only stdout goes to listing.txt, because stderr was made 
         # a copy of stdout before the redirection of stdout 
4

El ">" simplemente redirige la salida del comando al archivo en cuestión como el siguiente argumento. El uso típico es agregar esto al final del comando, pero puede estar en cualquier lugar. Entonces:

> outfile <command> es equivalente a <command> > outfile. Lo mismo ocurre con la redirección de entrada.

Tenga en cuenta que en los ejemplos anteriores <command> no es una sintaxis extraña - es simplemente reemplaza comando arbitrario.

+0

Probablemente no deba usar corchetes angulares alrededor de su mítico 'comando'; hace que el ejemplo sea algo confuso. –

+0

@MichaelBurr yeap Pensé en eso pero no pude encontrar un mejor formato. –

+1

'> OUTFILE COMMAND','> archivo_salida%%%% comando ','> $ archivo_salida $ command' – user123444555621

1

El equivalente no es:

cat infile > outfile 

Más bien, es

cat <infile> outfile 

(sólo que en el caso de los gatos, cat infile es igual que cat <infile)

Una vez que lo ve de esa manera, el comando original parece más directo.

0

Un líder signo mayor que (>) se usa para redirigir la salida. Por defecto, redirigirá STDOUT. En este caso, STDOUT está vacío y, por lo tanto, se crea un archivo nuevo y vacío (efecto similar al touch output).

También puede utilizar este estilo de mando a los archivos existentes vacías, es decir

$ echo FOO >/tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 4 Apr 17 01:49 /tmp/foo 
    $ > /tmp/foo 
    $ ls -l /tmp/foo 
    -rw-r--r-- 1 flah wheel 0 Apr 17 01:49 /tmp/foo 
    $ 

Para más información ver la sección de redirección de la página de manual de bash.

1

Una nota.Es porque en realidad se puede escribir este

< file command 

hace que el uso inútil de gato aún más inexcusable:

cat file | command 

Es decir, incluso si por alguna razón desea que el archivo sea sintácticamente a la a la izquierda del comando, todavía no necesita cat!

Cuestiones relacionadas