Imagina que quieres reenviar la salida del comando uname -a (que normalmente se envía a la salida estándar), pues queremos reenviarla al fichero datos.txt, con la condición de que si en ese archivo había algo previo lo borre, ¿cómo lo hacemos? uname -a > datos.txt uname -a >> datos.txt. Imagina que quieres reenviar la salida del comando uname -a (que normalmente se envía a la salida estándar), pues queremos reenviarla al fichero datos.txt, con la condición de que si en ese archivo había algo previo no lo borre, sino que esta nueva información sea añadida al final de lo que ya haya en ese archivo, ¿cómo lo hacemos? uname -a >> datos.txt uname -a > datos.txt. Cuál es la forma más rápida y trivial de mostrar el contenido de un fichero? Usando el comando... cat ls. La entrada estándar es... 0 1 2. La salida estándar es... 0 1 2. El error estándar es... 0 1 2. uname -a > datos.txt y uname -a >> datos.txt reenvían el resultado del comando que debería ir a la salida estándar hasta el archivo datos.txt, > y >> en esos comandos son abreviaturas, ¿cómo los escribimos de forma completa? uname -a 1> datos.txt y uname -a 1>> datos.txt uname -a 0> datos.txt y uname -a 0>> datos.txt uname -a 2> datos.txt y uname -a 2>> datos.txt. La entrada estándar es... 0 stdin 1 stdout 2 stderr 1 stdin 0 stdout 0 stderr 2 stdin 2 stdout 1 stderr. La salida estándar es... 0 stdin 1 stdout 2 stderr 1 stdin 0 stdout 1 stderr 2 stdin 2 stdout 2 stderr. El error estándar es... 0 stdin 1 stdout 2 stderr 1 stdin 0 stdout 0 stderr 2 stdin 2 stdout 1 stderr. Si queremos descartar la salida estándar de un comando o programa usamos... ls > /dev/null o ls 1> /dev/null ls > /dev/null o ls 0> /dev/null ls > /dev/null o ls 2> /dev/null. Un sinónimo de > es... 1> 0> 2>. Si queremos descartar el error estándar de un comando o programa que da error (como por ejemplo ls -j) usamos... ls -j 2> /dev/null ls -j 1> /dev/null ls -j 0> /dev/null. Dime un comando que cuenta líneas, palabras, bytes, etc. para un archivo dado wc ls. Qué es /dev/null?
En el directorio /dev están todos los archivos de los dispositivos de hardware, null es un archivo de eliminación para anular en tiempo de ejecución la salida estándar o el error estándar (es decir para recoger esos flujos y que sean eliminados sin ser usados por ningún elemento de linux)
Es un archivo donde acaban los elementos eliminados con rm
. Tenemos dentro de un script el comando cat que muestra el archivo prueba. Queremos que si el archivo se puede mostrar, o sea hay un flujo stdout normal vaya al archivo resultado_de_salida.txt. También queremos que si el archivo no se puede mostrar y se produce un error, este stderr vaya al archivo errores.log. ¿Cómo consigo esto? cat prueba 1> resultado_de_salida.txt 2> errores.log cat prueba 1> errores.log 2> resultado_de_salida.txt cat prueba 2> resultado_de_salida.txt 1> errores.log. Tenemos dentro de un script el comando cat que muestra el archivo prueba. Queremos que si el archivo se puede mostrar, o sea hay un flujo stdout normal vaya al archivo resultado_de_salida.txt. También queremos que si el archivo no se puede mostrar y se produce un error, este stderr vaya al archivo errores.log. ¿Cómo consigo esto? Usando:
cat prueba 1> resultado_de_salida.txt 2> errores.log
Pero pasa una cosa, si inicialmente hago el cat y obtengo un resultado se guarda en resultado_de_salida.txt. Después de esto obtengo un error y se guarda en errores.log. Después de esto tengo un resultado y se guarda en resultado_de_salida.txt. Tal como está escrito ese comando, en el segundo paso cuando salga un error, por la salida estándar no saldrá nada, pero ese "nada" sobreescribirá a resultado_de_salida.txt y ese fichero quedará vacío perdiéndose la información anterior. Lo mismo pasará con errores.log si después de almacenar algo en él, sale una salida estándar y no hay errores, se sobreescribirá a vacío. ¿Cómo arreglo esto?
cat prueba 1>> resultado_de_salida.txt 2>> errores.log cat prueba 1>||%j resultado_de_salida.txt 2>||%j errores.log. Tenemos esto cat prueba 1>> resultado_de_salida.txt 2>> errores.log y queremos que el stdout y el stderr vayan al mismo archivo. ¿Cómo lo hacemos? cat prueba >> resultado_de_salida_y_de_error.txt 2>&1 cat prueba >> resultado_de_salida_y_de_error.txt 1>&2 cat prueba 1>>&2 resultado_de_salida_y_de_error.txt cat prueba 2>>&1 resultado_de_salida_y_de_error.txt cat prueba > resultado_de_salida_y_de_error.txt 2>>&1 cat prueba >> resultado_de_salida_y_de_error.txt 2>>&1. Tenemos esto cat prueba queremos que la salida estándar vaya a resultado_de_salida_y_de_error.txt y borre lo que ya hubiese en ese fichero y además que el error estándar copie el comportamiento de la salida estándar incluyendo la función de pisar lo que ya hubiese ¿Cómo lo hacemos? cat prueba > resultado_de_salida_y_de_error.txt 2>&1 cat prueba >> resultado_de_salida_y_de_error.txt 1>&2 cat prueba 1>>&2 resultado_de_salida_y_de_error.txt cat prueba 2>>&1 resultado_de_salida_y_de_error.txt cat prueba >> resultado_de_salida_y_de_error.txt 2>>&1. Tenemos esto cat prueba queremos que la salida estándar haga un append (no borre lo que ya hubiese) sobre resultado_de_salida_y_de_error.txt y además que el error estándar copie el comportamiento de la salida estándar incluyendo la función de append (añadir sin borrar lo que ya hubiera) ¿Cómo lo hacemos? cat prueba >> resultado_de_salida_y_de_error.txt 2>&1 cat prueba >> resultado_de_salida_y_de_error.txt 1>&2 cat prueba 1>>&2 resultado_de_salida_y_de_error.txt cat prueba 2>>&1 resultado_de_salida_y_de_error.txt cat prueba > resultado_de_salida_y_de_error.txt 2>>&1 cat prueba >> resultado_de_salida_y_de_error.txt 2>>&1. Tengo esto:
cat prueba >> resultado_de_salida_y_de_error.txt 2>&1
y quiero modificarlo para que no se añada al final del archivo, sino que se sobreescriba cada vez que salga algo, ¿cómo lo hago?
cat prueba > resultado_de_salida_y_de_error.txt 2>&1 cat prueba >> resultado_de_salida_y_de_error.txt 2>>&1. Cuando usamos el comando wc para contar los elementos (palabras y otras cosas) de un archivo hacemos esto:
wc prueba
prueba se lo hemos pasado desde la entrada estándar
pero podemos sustituir la entrada estándar por el contenido de un fichero directamente, ¿cómo lo hago?
con wc 0< prueba o wc < prueba con wc 0< prueba con wc < prueba. Me gustaría hacer un ls -l y en el resultado buscar la letra a. ¿Cómo lo hago? ls -l | grep a grep a | ls -l. Cómo es la sintaxis habitual de grep? grep cadena_que_hay_que_buscar nombre_de_archivo grep nombre_de_archivo cadena_que_hay_que_buscar. ¿Cómo hacemos que el resultado de un comando tanto si es estándar como si es erróneo se elimine sin ser usado por ningun elemento de linux? cat prueba > /dev/null 2>&1 cat prueba 2> /dev/null 1>&2 cat prueba > /dev/null 1>&2 cat prueba 2> /dev/null 2>&1. Cómo redirecciono la salida estándar al error estándar? 1>&2 2>&1. Cómo redirecciono el error estándar a la salida estándar? 2>&1 1>&2. Has intentado que el resultado de un comando tanto si es estándar como si es erróneo se elimine sin ser usado por ningun elemento de gnu/linux, para ello has usado el comando:
cat prueba > /dev/null 1>&2
pero no funciona
¿por qué?
no funciona porque aunque > es igual que 1> y manda la stdout a /dev/null luego le digo que stdout irá por donde vaya stderr (2), y stderr aún tiene su salida por defecto (la pantalla)
no funciona porque aunque > es igual que 1> y manda la stdout a /dev/null luego le digo que stdout irá por donde vaya stdin (1), y stdout aún tiene su salida por defecto (la pantalla)
. Redirección de la entrada estándar: quiero hacer un ls desde un archivo, el parámetro del directorio lo tendré almacenado en un archivo, cómo lo hago, si sabemos que el archivo se llama direccion.txt?
xargs ls -l 0< direccion.txt
xargs ls -l < direccion.txt
ls -l 0< direccion.txt
ls -l 0< direccion.txt
. Si | es una tubería, podemos usarlo con el comando tee de esta manera: | tee
Ahora ya no es una tubería simple, qué es?
alegóricamente es una tubería en t, produce paralelismo es decir es utilizado para leer desde la entrada estándar y escribir a la salida estándar y a los archivos SIMULTÁNEAMENTE
alegóricamente es una tubería en t, produce secuencialidad es decir es utilizado para leer desde la entrada estándar y escribir a la salida estándar y a los archivos NO SIMULTÁNEAMENTE
. Si tengo un conjunto de palabras en el archivo "prueba.txt" y uso el comando "wc" y quiero que el resultado salga a la salida estándar y a la vez a "archivo.txt", la combinación correcta es:
wc < prueba.txt | tee archivo.txt
wc 0< prueba.txt | tee archivo.txt
Ambas son correctas
.
|