Respuestas:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Puede redirigir la salida de un comando a un archivo:
$ cat file > copy_file
o añádele
$ cat file >> copy_file
Si quieres escribir directamente el comando es echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(gracias al comentario de lukaserat anterior)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txt
luego presione ctrl + D cuando haya terminado .
Sé que esta es una pregunta muy antigua, pero como el OP se trata de secuencias de comandos, y por el hecho de que Google me trajo aquí, también deberían mencionarse los descriptores de archivos abiertos para leer y escribir al mismo tiempo.
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
Luego cat
el archivo en la terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Este ejemplo hace que el archivo poem.txt esté abierto para leer y escribir en el descriptor de archivo 3. También muestra que los cuadros * nix conocen más fd que solo stdin, stdout y stderr (fd 0,1,2). En realidad tiene mucho. Por lo general, se puede encontrar el número máximo de descriptores de archivo que el núcleo puede asignar /proc/sys/file-max
o, /proc/sys/fs/file-max
pero usar cualquier fd por encima de 9 es peligroso ya que podría entrar en conflicto con los fd utilizados internamente por el shell. Así que no te molestes y solo usa fd's 0-9. Si necesita más los 9 descriptores de archivo en un script bash, debe usar un idioma diferente de todos modos :)
De todos modos, los fd se pueden usar de muchas maneras interesantes.
Me gusta esta respuesta:
cat > FILE.txt <<EOF
info code info
...
EOF
pero sugeriría cat >> FILE.txt << EOF
si desea simplemente agregar algo al final del archivo sin eliminar lo que ya existe
Me gusta esto:
cat >> FILE.txt <<EOF
info code info
...
EOF
Mover mi comentario como respuesta, según lo solicitado por @lycono
Si necesita hacer esto con privilegios de root, hágalo de esta manera:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
ejecutar solo tee
como root.
Para entornos en los documentos no están disponibles aquí ( Makefile
, Dockerfile
, etc.) que puede utilizar a menudo printf
para una solución razonablemente legible y eficiente.
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
Pensé que había algunas respuestas perfectamente buenas, pero no un resumen conciso de todas las posibilidades; así:
El principal principal detrás de la mayoría de las respuestas aquí es la redirección . Dos son operadores de redirección importantes para escribir en archivos:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
Otros mencionaron, en lugar de una fuente de entrada fija como echo 'text'
, también podría escribir de manera interactiva en los archivos a través de un "Documento aquí", que también se detalla en el enlace al manual de bash anterior. Esas respuestas, por ejemplo
cat > FILE.txt <<EOF
o cat >> FILE.txt <<EOF
utilice los mismos operadores de redireccionamiento, pero agregue otra capa a través de "Aquí Documentos". En la sintaxis anterior, escribe en FILE.txt a través de la salida decat
. La escritura solo tiene lugar después de que la entrada interactiva recibe una cadena específica, en este caso 'EOF', pero podría ser cualquier cadena, por ejemplo:
cat > FILE.txt <<'StopEverything'
o cat >> FILE.txt <<'StopEverything'
funcionaría igual de bien. Aquí los documentos también buscan varios delimitadores y otros caracteres de análisis interesantes, así que eche un vistazo a los documentos para obtener más información al respecto.
Un poco complicado, y más de un ejercicio para comprender tanto la redirección como la sintaxis Here Documents, pero podría combinar la sintaxis de estilo Here Document con operadores de redireccionamiento estándar para convertirse en una cadena Here:
Salida de redireccionamiento de entrada catcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
También puede usar aquí el documento y vi, el siguiente script genera un FILE.txt con 3 líneas e interpolación variable
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Entonces el archivo tendrá 3 líneas como a continuación. "i" es iniciar el modo de inserción vi y, de manera similar, cerrar el archivo con Esc y ZZ.
#This is my var in text file
var = Test
#Thats end of text file