¿Qué significa `>>` en el comando de terminal?

14

Me encontré con un comando que ahora se da a continuación:

$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile

Por lo que puedo adivinar, probablemente se usa para confirmar los cambios en .bash_profile, pero ¿para qué se usa exactamente?

monstruo
fuente
26
Solo para hacerle saber qué mejorar en el futuro: man bashestá escrito con un lenguaje bastante formal, puede ser difícil de entender. Por otro lado, la frase bash >>devuelve pocos enlaces útiles en Google. Es cierto que queremos agregar conocimiento sin depender de Google; Por esta razón, incluso una pregunta con una respuesta fácil de buscar puede encajar. Sin embargo, el hecho de que no proporcionó la respuesta de inmediato (consulte ¿Puedo responder mi propia pregunta? ) Ni señaló los recursos existentes (que posiblemente necesite ayuda para comprender) indica una falta de investigación.
Kamil Maciorowski
55
Para obtener una descripción detallada de los operadores de redirección de línea de comandos, consulte unix.stackexchange.com/q/159513/85039
Sergiy Kolodyazhnyy

Respuestas:

31

Redirige el stdout del programa antes >>y lo agrega al archivo dado después.

kai-dj
fuente
28
"programa antes" ¿Qué significa eso? Comando obviamente, pero las redirecciones también se pueden escribir antepuestas, es decir>> file command
rexkogitans
Un ejemplo. En Ubuntu 18.04 podría escribir "apt search rust >> x" La parte "apt search rust" busca paquetes disponibles para el término rust y luego lo envía al estándar (normalmente el terminal en este caso). Sin embargo, ">> x" dice que redirija la salida al final del archivo "x". Si solo quisiera reemplazar el archivo, solo necesitaría un solo ">".
NomadMaker
@rexkogitans Más incluso en el medio del comando si desea que su código sea confuso de leer. echo a b >> c dse agregaría a b da un archivo llamado c.
kasperd
@kasperd También puede dispersar la redirección de stdin entre ellos en cualquier orden, además.
rexkogitans
48

Respuesta corta: ¿qué hace >>?

Con >>, agrega la salida de un comando a un archivo.

Su comando de ejemplo consta de varias partes, básicamente:

comando >> nombre de archivo

Lo que la salida de commandse anexa a filename.


¿Qué sucede en el caso específico de echo?

En su caso específico, el echo "…"comando envía sus argumentos de entrada a "stdout", que es el llamado "descriptor de salida estándar". Los argumentos de entrada a echoson seguidos por una nueva línea ( \n), para que obtenga un salto de línea.

Aquí, un "descriptor de salida estándar" no es más que una secuencia de salida que se muestra en su shell cuando ejecuta un comando. (Es decir, cuando escribe echo fooy presiona Enter, foo\nes el resultado real del echocomando, que se muestra en su shell fooseguido de una nueva línea).

Básicamente, todo lo que escribe en su línea de comando está usando stdout. También hay otro descriptor llamado "stderr" que normalmente se usa para mensajes de error. También se imprimirá como stdout, por lo que a veces se pueden intercalar. Y hay un descriptor stdin que se utiliza para la entrada. Vea este artículo para más información.

¿Cómo redirige la salida en el shell?

Siempre puede redirigir stdout a un descriptor de archivo, lo que puede hacer con uno de estos operadores:

  • >redirige a un descriptor de archivo. Crea el archivo si no existe o, si ya existe, trunca el archivo antes de escribirlo. Por lo tanto, el archivo se sobrescribirá con stdout.

  • >>se agrega a un descriptor de archivo. Crea el archivo si no existe.

También puede redirigir stderr utilizando 2>o 2>>de manera similar. O puede combinar stderr y stdout en un solo archivo: 2>&1eso hace. Para obtener más información sobre la redirección y algunos ejemplos más, puede leer este pequeño tutorial .

¿Cómo puedo averiguar qué significa un código de shell en particular?

En general, es posible que desee probar explicahell.com , que le brindará orientación visual e información sobre un comando de shell en particular.

slhck
fuente
7

Para las personas TLDR a las que les gusta ver un ejemplo;

La salida estándar (no errores) del comando antes del >> se agregará al final del archivo que lleva su nombre.

Entonces, si el archivo "flintstones.txt" contiene;

Fred
Barney

echo Dino >> flintstones.txt dará como resultado que se agregue 'Dino' al final del archivo;

Fred
Barney
Dino
Mark Boyce
fuente
Le recomendaría que agregue un ejemplo de echo Dino > flintstones.txtpara mostrar el contenido de la misma sería simplemente Dinosi se hace con una sola flecha hacia la derecha.
JakeGould
-2

De nuevo, si lo haces

> somefile.txt

Se borrará todo el contenido del archivo.

Rocksyne
fuente
¿Por qué estás copiando otra respuesta?
Toto
@Toto No creo que lo haga. Parece ser adicional y muy valioso.
Volker Siegel
@Toto ¡Uy! Mirando más de cerca, en realidad no es el caso. Incorrecto incluso en múltiples aspectos. Extraño, es nuevo aquí, pero activo en otros lugares, por lo que probablemente no sea solo trolling.
Volker Siegel
2
@VolkerSiegel: > fileborra el archivo pero >> fileno hace nada.
Toto
pero esto no responde a la pregunta de ninguna manera y debe ser un comentario
phuclv