<Anterior | Contenido | Siguiente>
Redirigir la salida estándar
La redirección de E / S nos permite redefinir dónde va la salida estándar. Para redirigir la salida estándar a otro archivo en lugar de la pantalla, usamos el operador de redirección “>” seguido del nombre del archivo. ¿Por qué querríamos hacer esto? Suele ser útil almacenar la salida de un comando en un archivo. Por ejemplo, podríamos decirle al shell que envíe la salida del ls comando al archivo ls-salida.txt en lugar de la pantalla:
[yo @ linuxbox ~] $ ls -l / usr / bin> ls-salida.txt
[yo @ linuxbox ~] $ ls -l / usr / bin> ls-salida.txt
Aquí, creamos una lista larga de / usr / bin directorio y envió los resultados al archivo
ls-output.txt. Examinemos la salida redirigida del comando:
[yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 167878 2016-02-01 15:07 ls-output.txt
[yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 167878 2016-02-01 15:07 ls-output.txt
Bien; un archivo de texto grande y agradable. Si miramos el archivo con less, veremos que el archivo
ls-output.txt de hecho contiene los resultados de nuestro comando ls:
[yo @ linuxbox ~] $ menos ls-output.txt
[yo @ linuxbox ~] $ menos ls-output.txt
Ahora, repitamos nuestra prueba de redirección, pero esta vez con un giro. Cambiaremos el nombre del directorio por uno que no existe:
[yo @ linuxbox ~] $ ls -l / bin / usr> ls-salida.txt
ls: no se puede acceder a / bin / usr: no existe tal archivo o directorio
[yo @ linuxbox ~] $ ls -l / bin / usr> ls-salida.txt
ls: no se puede acceder a / bin / usr: no existe tal archivo o directorio
Recibimos un mensaje de error. Esto tiene sentido ya que especificamos el directorio inexistente / bin / usr, pero ¿por qué se mostraba el mensaje de error en la pantalla en lugar de ser redirigido al archivo? ls-salida.txt? La respuesta es que el ls El programa no envía sus mensajes de error a la salida estándar. En cambio, como la mayoría de los programas Unix bien escritos, envía sus mensajes de error al error estándar. Dado que solo redirigimos la salida estándar y no el error estándar, el mensaje de error aún se envió a la pantalla. Veremos como
Redirigir la salida estándar
para redirigir el error estándar en solo un minuto, pero primero, veamos qué sucedió con nuestro archivo de salida:
[yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 0 2016-02-01 15:08 ls-output.txt
[yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 0 2016-02-01 15:08 ls-output.txt
¡El archivo ahora tiene una longitud cero! Esto se debe a que, cuando redirigimos la salida con el operador de redirección “>”, el archivo de destino siempre se reescribe desde el principio. Ya que nuestro ls El comando no generó resultados y solo un mensaje de error, la operación de redirección comenzó a reescribir el archivo y luego se detuvo debido al error, lo que provocó su truncamiento. De hecho, si alguna vez necesitamos truncar un archivo (o crear un archivo nuevo y vacío) podemos usar un truco como este:
[yo @ linuxbox ~] $ > ls-salida.txt
[yo @ linuxbox ~] $ > ls-salida.txt
El simple hecho de usar el operador de redirección sin ningún comando precedente truncará un archivo existente o creará un nuevo archivo vacío.
Entonces, ¿cómo podemos agregar la salida redirigida a un archivo en lugar de sobrescribir el archivo desde el principio? Para eso, usamos el operador de redirección ">>", así:
[yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt
[yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt
El uso del operador ">>" dará como resultado que la salida se agregue al archivo. Si el archivo aún no existe, se crea como si se hubiera utilizado el operador “>”. Pongámoslo a prueba:
[yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 503634 2016-02-01 15:45 ls-output.txt
[yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l / usr / bin >> ls-salida.txt [yo @ linuxbox ~] $ ls -l ls-salida.txt
-rw-rw-r-- 1 yo yo 503634 2016-02-01 15:45 ls-output.txt
Repetimos el comando tres veces dando como resultado un archivo de salida tres veces más grande.