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

Jun 28 2018

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

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

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

Respuestas

31 kai-dj Jun 28 2018 at 12:06

Redirige la >>salida estándar del programa antes y la agrega al archivo dado después.

48 slhck Jun 28 2018 at 14:13

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

Entonces, la salida de commandse agregaría 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 echovan seguidos de una nueva línea ( \n), de modo que obtenga un salto de línea.

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

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

¿Cómo redirigir 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 usando 2>o 2>>de manera similar. O puede combinar stderr y stdout en un archivo: 2>&1hace eso. 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?

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

7 MarkBoyce Jun 29 2018 at 09:58

Para la gente de TLDR que simplemente quiere 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