¿Cómo puedo crear un archivo con varias líneas desde la línea de comandos?

¿Cómo puedo crear un archivo con varias líneas desde la línea de comandos?

¿Cómo puedo ingresar los siguientes contenidos en un archivo?

Hi
abcd

Intenté usar echo "Hi\nabcd" >> ab.txt, pero en el archivo está escrito tal cual ( \nestá incluido, en lugar de una nueva línea)

Respuesta1

Tienes que decir echoque se respeten las secuencias de escape.

echo -e "Hi\nabcd" >> ab.txt

Respuesta2

El comportamiento deechovaría de un caparazón a otro¹;printfEl comportamiento es más estándar.

printf "Hi\nabcd" >> ab.txt

¹ "No es posible utilizarecoportátil en todos los sistemas POSIX a menos que ambos-norte(como primer argumento) y las secuencias de escape se omiten."

Respuesta3

Yo sugeriría usarcaracterística de bash shell llamadaAquí documento. Parece la forma más elegante de lograr lo que describe. Lo más importante es que el contenido de varias líneas se ve exactamente igual que lo tendría en el archivo de salida (a diferencia de \ncadenas largas, separadas e ilegibles).

cat > ab.txt <<EOL
Hi
abcd
EOL

Aquí EOLestá el marcador que indica qué shell debe buscar para encontrar el final delaquí documento. Puedes elegir arbitrariamente una palabra que te permita elegir algo que no entre en conflicto con laaquí documentoEl contenido en sí. Lo bueno es que podrías tener un caparazón ${VARIABLES}que será sustituido. Si eso no es deseado, siempre puedes encerrar la palabra marcadora de apertura (¡sólo la de apertura!) entre comillas ( ') para evitarlo.

Personalmente uso mucho esto en los scripts de inicio para crear pequeños archivos de configuración al configurar mi entorno, algo como:

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER

Respuesta4

También puedes jugar juegos con citas:

 % echo 'Hi
> abcd' >> ab.txt

Escribe eso en bash presionando "Entrar" después de "Hola". Bash usa '>' como símbolo de continuación del comando para mí. Por alguna razón no pude escapar de una devolución individual con una barra invertida.

información relacionada