echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
¿Cómo lo hago para que cree el archivo si no existe, pero lo sobrescribe si ya existe? En este momento este script solo se agrega.
Un poco de comprensión de cómo funcionan las tuberías * nix ayudaría.
En resumen, el >>
operador de redireccionamiento agregará líneas al final del archivo especificado, donde-como el único mayor que >
vaciará y sobrescribirá el archivo.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
y >>
son los operadores de redirección de salida . El operador de la tubería es |
.
>|
para forzar la sobrescritura existente
En Bash, si ha configurado noclobber a la set -o noclobber
, entonces usa la sintaxis>|
Por ejemplo:
echo "some text" >| existing_file
Esto también funciona si el archivo aún no existe
Compruebe si noclobber está configurado con: set -o | grep noclobber
Para obtener una explicación más detallada sobre este tipo especial de operador, consulte esta publicación
Para obtener una lista más exhaustiva de operadores de redirección, consulte esta publicación
&>| file
funciona. ¿Qué shell y versión estás usando? @stimulate para zsh ambos deberían funcionar , para bash es solo>|
echo "aaa" &>| test.txt
da como resultado un error -bash: syntax error near unexpected token |
. Mi noclobber está activado.
echo "aaa" >| test.txt 2>&1
o usar otro caparazón.
A pesar NylonSmile
de la respuesta , que es "más o menos" correcta ... No pude sobrescribir archivos de esta manera ...
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
para resolver mis problemas ... tuve que usar ... >!
, a la ...
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Obviamente, ten cuidado con esto ...
NOCLOBBER
establecida la opción zsh no predeterminada . Use setopt clobber
para restaurar el comportamiento predeterminado.
Si su entorno no permite sobrescribir con >
, use pipe |
y en su tee
lugar de la siguiente manera:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Tenga en cuenta que esto también se imprimirá en la salida estándar. En caso de que esto no sea deseado, puede redirigir la salida de la /dev/null
siguiente manera:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
Solo observando que si desea redirigir std :: cerr y std :: cout a un archivo mientras no tiene configurado el ciclobber (es decir set -o noclobber
), puede usar el código:
cmd >|file.txt 2>&1
Se puede ver más información sobre esto en https://stackoverflow.com/a/876242 .
También esta respuesta es la pregunta de @ TuBui sobre la respuesta @BrDaHa proporcionada anteriormente el 9 de agosto de 18 a las 9:34.
Para sobrescribir el contenido de un archivo a otro archivo. utilizar gato por ejemplo.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Ahora para sobrescribir foobar podemos usar un comando cat como se muestra a continuación
cat bar.txt >> foobar.txt
cat foobar.txt
>>
se agrega, no se sobrescribe
Si tiene una salida que puede tener errores, es posible que desee utilizar un ampersand y un mayor que, de la siguiente manera:
my_task &> 'Users/Name/Desktop/task_output.log'
esto redirigirá tanto stderr como stdout al archivo de registro (en lugar de solo stdout).