¿Por qué es que casi todas las instrucciones relacionadas con la adición de texto a los archivos del sistema tienen gusto fstab
e /etc/apt/sources.list.d/<name>.list
implican el uso tee
y la adición de echo
dicho texto?
Tome los siguientes ejemplos, que se ejecutan como root :
## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2
Correr diff -u file1 file2
no devuelve nada; correr md5sum file1 file2
muestra que sus sumas de verificación son idénticas, lo que me lleva de vuelta a mi pregunta original:
¿Por qué es | tee <FILENAME>
tan frecuente en los documentos de Ubuntu, es solo una buena práctica, de lo contrario, no sería más fácil usar el ejemplo 2 en lugar de pasar la salida de echo
a tee
?
command-line
tee
Alexej Magura
fuente
fuente
Respuestas:
Hay una diferencia: tee duplica la salida: la envía tanto al archivo como a la pantalla.
Pero hay más:
Por ejemplo, si desea escribir alguna cadena en dos archivos a la vez, el comando con tee que puede usar es:
Otra cosa que te puede ayudar es evitar un problema al usar sudo. El operador de redirección de salida normal siempre se ejecuta con sus privilegios de usuario, también cuando escribe un sudo delante del comando que genera el texto STDOUT. En otras palabras, esto fallará si no tiene el permiso para escribir en ese archivo:
Pero con tee, todo irá bien:
2 ejemplos de este sitio . Tiene un poco más.
fuente
sudo
sintee
-sudo sh -c 'echo SOMETHING > FILE'
...;)"
, las cosas se vuelven desordenadasecho "some text" | tee file1 file2 ... fileN
y tal vez agregue> /dev/null
, si no desea desorden en stdout.tee
toma la secuencia de entrada estándar y la escribe tanto en la secuencia de salida estándar como en una secuencia de archivos. Si ayuda a la gente a recordar, el nombre del comando proviene de un divisor en T en la tubería. Hay un buen artículo de Wikipedia donde aprendí sobre el origen del nombre del comando.fuente
En primer lugar, en
tee
sí mismo no agrega texto, ni tampoco>
.Es
tee -a
y su complemento,>>
que APENDE el texto.No creo que todos los shells admitan la
>>
función, por esotee
se usa más comúnmente. (Piense en simplemente viejosh
). Tee es un comando, mientras que>>
es un operador.Si usa (mi favorito personal)
bash
,>
y>>
es mucho más agradable / fácil.El uso
tee
también le permite sudo SOLO ese comando para que no tenga que sudo la declaración completa, como ensudo sh -c "echo foo > bar"
.tee
También le permite dividir la salida. Por supuesto, todo esto se puede ver enman tee
. Es principalmente solo su preferencia personal.Para leer más, ver aquí y aquí .
fuente
sudo somecommand >> filea
se ejecutarásudo somecommand
y luego, como el usuario que invoca , agregar la salida afilea
. Usarsudo sh -c "somecommand >> filea"
obras, pero puede causar pesadillas entre comillas anidadas. El uso sesomecommand | sudo tee -a filea
ejecutasomecommand
como el usuario que invoca, y luego agrega la salidafilea
como root, que generalmente es lo que el usuario quería.