Risposte:
Una piccola comprensione di come funzionano i tubi * nix sarebbe di aiuto.
In breve, l' >>
operatore di reindirizzamento aggiungerà le righe alla fine del file specificato, dove -come il singolo maggiore di >
svuota e sovrascrive il file.
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
.
>
e >>
sono gli operatori di reindirizzamento dell'output . L'operatore del tubo è |
.
>|
per forzare la sovrascrittura esistente
In Bash, se hai impostato noclobber a la set -o noclobber
, allora usi la sintassi>|
Per esempio:
echo "some text" >| existing_file
Questo funziona anche se il file non esiste ancora
Controlla se noclobber è impostato con: set -o | grep noclobber
Per una spiegazione più dettagliata su questo tipo speciale di operatore, vedi questo post
Per un elenco più completo di operatori di reindirizzamento, fare riferimento a questo post
&>| file
funziona. Quale shell e versione stai usando? @stimulate for zsh dovrebbero funzionare entrambi , per bash è solo>|
echo "aaa" &>| test.txt
risulta in errore -bash: syntax error near unexpected token |
. Il mio noclobber è acceso.
echo "aaa" >| test.txt 2>&1
o usare un'altra shell.
Nonostante NylonSmile
la risposta , che è "una specie di" corretta .. Non sono stato in grado di sovrascrivere i file, in questo modo ..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
per risolvere i miei problemi .. Ho dovuto usare ... >!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Ovviamente, stai attento con questo ...
NOCLOBBER
impostato l' opzione zsh non predefinita . Utilizzare setopt clobber
per ripristinare il comportamento predefinito.
Se il tuo ambiente non consente la sovrascrittura con >
, usa pipe |
e tee
invece come segue:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Nota che questo verrà anche stampato sullo stdout. Nel caso in cui ciò sia indesiderato, è possibile reindirizzare l'output /dev/null
come segue:
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 notando che se si desidera reindirizzare sia std :: cerr che std :: cout su un file mentre è impostato noclobber (cioè set -o noclobber
), è possibile utilizzare il codice:
cmd >|file.txt 2>&1
Ulteriori informazioni al riguardo sono disponibili su https://stackoverflow.com/a/876242 .
Anche la domanda di @ TuBui di questa risposta sulla risposta @BrDaHa fornita sopra al 9 agosto 18 alle 9:34.
Per sovrascrivere il contenuto di un file in un altro file. utilizzare gatto ad es.
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
Ora per sovrascrivere foobar possiamo usare un comando cat come di seguito
cat bar.txt >> foobar.txt
cat foobar.txt
>>
è accodare, non sovrascrivere
Se hai un output che può avere errori, potresti voler usare una e commerciale e una maggiore di, come segue:
my_task &> 'Users/Name/Desktop/task_output.log'
questo reindirizzerà sia stderr che stdout al file di registro (anziché solo stdout).