¿Cuál es el nombre de este operador? Me gustaría encontrar un manual al respecto.
Vlad T.
96
el operador> redirige la salida a un archivo que sobrescribe el archivo si existe. El >> se agregará a un archivo existente.
Triton Man
44
Gracias, aquí está el enlace a la página wiki, en caso de que alguien lo necesite es.wikipedia.org/wiki/…
Vlad T.
11
Si necesita hacer esto con privilegios de root, hágalo de esta manera:sudo sh -c 'echo "some data for the file" >> fileName'
lukaserat
1
¿Qué pasa si mi texto es algo como esto y por cualquier razón, no puedo usar curlo wget?
asedsami
145
#!/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
Una explicación de su código contribuiría en gran medida a que sea más útil para otros. Incluso las llamadas de vocabulario como "documento aquí" y "redirección" pueden dirigir a los buscadores a otros recursos.
Palpatim
2
La explicación no es tan necesaria para algo como esto.
Bhargav Nanekalva
66
La explicación nunca es necesaria cuando ya sabes la respuesta. Para mí, el código anterior no es útil debido a la falta de detalles.
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 catel 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-maxo, /proc/sys/fs/file-maxpero 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.
Es posible que desee evitar ejecutar un shell raíz solo para imprimir una cadena. Intenta echo "some data for the file" | sudo tee -a fileName >/dev/nullejecutar solo teecomo root.
tripleee
6
Para entornos en los documentos no están disponibles aquí ( Makefile, Dockerfile, etc.) que puede utilizar a menudo printfpara 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
Tu comentario anterior Prueba echo "algunos datos para el archivo" | sudo tee -a fileName> / dev / null para ejecutar solo tee como root. fue realmente útil!
Kojo
5
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:
Salida de redireccionamiento:
echo 'text to completely overwrite contents of myfile' > myfile
Salida redirigida anexa
echo 'text to add to end of myfile' >> myfile
Aquí documentos
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.
Aquí cuerdas
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 cat
cat > myfile <<<'text to completely overwrite contents of myfile'
Agregar salida redirigida de entrada cat
cat >> myfile <<<'text to completely overwrite contents of myfile'
sudo sh -c 'echo "some data for the file" >> fileName'
curl
owget
?fuente
Puede redirigir la salida de un comando a un archivo:
o añádele
Si quieres escribir directamente el comando es
echo 'text'
fuente
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(gracias al comentario de lukaserat anterior)fuente
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.
Luego
cat
el archivo en la terminalEste 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.
fuente
Me gusta esta respuesta:
pero sugeriría
cat >> FILE.txt << EOF
si desea simplemente agregar algo al final del archivo sin eliminar lo que ya existeMe gusta esto:
fuente
Mover mi comentario como respuesta, según lo solicitado por @lycono
Si necesita hacer esto con privilegios de root, hágalo de esta manera:
fuente
echo "some data for the file" | sudo tee -a fileName >/dev/null
ejecutar solotee
como root.Para entornos en los documentos no están disponibles aquí (
Makefile
,Dockerfile
, etc.) que puede utilizar a menudoprintf
para una solución razonablemente legible y eficiente.fuente
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:
Salida de redireccionamiento:
echo 'text to completely overwrite contents of myfile' > myfile
Salida redirigida anexa
echo 'text to add to end of myfile' >> myfile
Aquí documentos
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 ejemplocat > FILE.txt <<EOF
ocat >> 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 de
cat
. 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'
ocat >> 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.
Aquí cuerdas
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 cat
Agregar salida redirigida de entrada catcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
fuente
También puede usar aquí el documento y vi, el siguiente script genera un FILE.txt con 3 líneas e interpolación variable
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.
fuente
esta es mi respuesta. $ cat archivo> copy_file
fuente