Respuestas:
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).