Crear, escribir y guardar archivos desde un script de Shell

10

No quiero escribir el archivo manualmente, así que hice un script de shell. ¿Hay alguna manera de escribir y guardar el archivo automáticamente sin que el usuario presione las teclas?

sudo nano blah
#write stuff to file
#save file
#continue

^ Esto estará dentro de un archivo * .sh

¿O hay otra forma de crear un archivo de texto simple en un script?

Zarkopafilis
fuente
1
Sospecho que estás haciendo la pregunta incorrecta aquí. Hay formas mucho más simples de escribir en un archivo de manera programática que tratar de controlar un editor como nano. Díganos qué quiere hacer con el archivo.
Warren Hill
Solo quiero crearlo y escribir un montón de líneas.
Zarkopafilis
¿Está solicitando una solución similar a Autoit para Windows que pueda automatizar programas GUI, entre otras cosas, o cómo poder escribir texto desde un script de shell, por ejemplo $echo "Some text" > afile.txt?
Stef K
@ Zarkopafilis: he editado tu pregunta para aclarar lo que quieres decir. Si te he entendido mal, siempre puedes revertirlo. También he publicado una respuesta para ti.
Warren Hill

Respuestas:

14

Para secuencias de comandos más complejas, debería considerar usar el catcomando con un documento aquí . El formato básico es

command > file << END_TEXT
some text here
more text here
END_TEXT

Hay dos comportamientos sutilmente diferentes dependiendo de si la etiqueta END_TEXT se cita o no:

  1. etiqueta sin comillas : el contenido se escribe después de las expansiones de shell habituales

  2. etiqueta citada : el contenido del documento aquí se trata literalmente, sin las expansiones de shell habituales

Por ejemplo, considere el siguiente script

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

Los resultados son

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

y

$ cat file2
do some commands on "$var1" 
and/or "$var2"

Si está generando comandos de shell desde su script, probablemente desee el formulario citado.

conductor de acero
fuente
Hombre, ¿cuánto tiempo busqué esta ^^ una pregunta: ¿esto solo funciona en script o es posible usarlo directamente en el shell?
derHugo
@derHugo puede usarlo directamente en el shell; en ese caso, sería más habitual omitir el END_TEXTy simplemente usarlo CTRL-Dpara señalar el final de la entrada. Vea, por ejemplo, Cómo señalar el final de la entrada estándar
steeldriver
7

No hay necesidad de meterse con un editor para hacer esto.

Puede agregar algo a un archivo con un simple comando echo. Por ejemplo

echo "Hello World" >> txt

Agregará "Hola mundo" al archivo txt. Si el archivo no existe, se creará.

O si el archivo ya puede existir y desea sobrescribirlo

echo "Hello World" > txt

Para la primera línea: y

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

Para líneas posteriores.

En su forma más simple, el .shscript podría contener un conjunto de comandos echo.

Warren Hill
fuente