2012-06-22 12 views

Respuesta

168
echo "some data for the file" >> fileName 
+0

¿Cuál es el nombre de este operador? Me gustaría encontrar un manual al respecto. –

+21

el operador> redirige la salida a un archivo que sobrescribe el archivo, si existe. >> se agregará a un archivo existente. –

+1

Gracias, aquí está el enlace a la página wiki, en caso de que alguien lo necesite http://en.wikipedia.org/wiki/Redirection_(computing)#Redirecting_standard_input_and_standard_output –

34

Puede redirigir la salida de un comando a un archivo:

$ cat file > copy_file 

o anexar a ella

$ cat file >> copy_file 

Si desea escribir directamente el comando es echo 'text'

$ echo 'Hello World' > file 
+0

Si necesita el permiso de root: 'sudo sh -c 'archivo de gato>/etc/init/gunicorn.conf'' (gracias al comentario de lukaserat anterior) – aero

86
#!/bin/sh 

FILE="/path/to/file" 

/bin/cat <<EOM >$FILE 
text1 
text2 
text3 
text4 
EOM 
+1

Buen resultado multilínea. –

+3

Los principiantes se beneficiarían de saber exactamente qué hacer con este archivo. Cómo guardarlo, cómo ejecutarlo, etc. – Danny

+0

Explicar en lugar de simplemente poner un trozo de código. Lo haría mucho más útil para todos, especialmente los novatos. –

18
#!/bin/bash 

cat > FILE.txt <<EOF 

info code info 
info code info 
info code info 

EOF 
+14

Una explicación de su código ayudaría mucho a hacer que otros puedan usarlo mejor. Incluso las leyendas de vocabulario como "documento aquí" y "redirección" pueden dirigir a los buscadores a otros recursos. – Palpatim

+0

La explicación no es tan necesaria para algo como esto. –

+2

Información sobre 'EOF' y técnica relacionada: http://stackoverflow.com/a/2954835/712334 –

8

me gusta esta respuesta:

cat > FILE.txt <<EOF 

info code info 
... 
EOF 

pero sugeriría cat >> FILE.txt << EOF Si sólo desea añadir algo al final del archivo sin borrar lo que ya se existe

De esta manera:

cat >> FILE.txt <<EOF 

info code info 
... 
EOF 
+1

Agregue una explicación con la respuesta de cómo esta respuesta ayuda a OP a corregir el problema actual –

3

Moviendo mi comentario como respuesta, como lo solicitó @lycono

Si necesita hacer esto con privilegios de root, hacerlo de esta manera:

sudo sh -c 'echo "some data for the file" >> fileName' 
8

Sé que esto es una cuestión de edad maldita, pero a medida que el PO se trata de secuencias de comandos, y por el hecho de que Google me llevó aquí, también se debe mencionar la apertura de descriptores de archivos 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>&- 

Entonces cat el archivo en el terminal

$ cat poem.txt 
Roses are red 
Violets are blue 
Poems are cute 
And so are you 

Este ejemplo hace que poem.txt archivo a estar abierto para la lectura y la escritura en el descriptor de archivo 3. También muestra que las cajas * nix saben más de fd entonces solo stdin, stdout y stderr (fd 0,1,2). En realidad tiene mucho. Por lo general, el número máximo de descriptores de archivos que el kernel puede asignar se puede encontrar en /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 fd utilizado internamente por el shell. Así que no te molestes y solo usa fd's 0-9. Si necesita más de los 9 descriptores de archivos en un script bash, debe usar un idioma diferente de todos modos :)

De todos modos, los fd se pueden usar de muchas maneras interesantes.

Cuestiones relacionadas