2011-01-13 12 views
127
echo "text" >> 'Users/Name/Desktop/TheAccount.txt' 

Come faccio a farlo in modo che crei il file se non esiste, ma lo sovrascrive se già esiste. In questo momento questo script si aggiunge solo.Scrive sul file, ma sovrascrive se esiste

+0

beh, questo è fantastico. Ho riconosciuto> un po 'prima di >>. – Jokester

risposta

242

Una piccola comprensione di come funzionano i tubi * nix.

In breve l'operatore >> reindirizzamento aggiungerà righe alla fine del file specificato, dov'è come unico superiore > svuoterà e sovrascrivere il file.

echo "text" > 'Users/Name/Desktop/TheAccount.txt' 
+2

Alcuni ambienti non consentono qualcosa come '-bash: TheAccount.txt: non può sovrascrivere il file esistente'. –

+7

Inoltre, '>' e '>>' sono gli * operatori di reindirizzamento dell'output *. L'operatore di pipe è '|'. –

+0

Vedere la risposta di @BrDaHa.Usa '> |' per forzare la sovrascrittura esistente – Jake

27

Nonostante NylonSmile's answer, che è "una sorta di" corretta .. ero in grado di sovrascrivere 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 "[email protected]" >! "$X" || echo "[email protected]" > "$X" 

Ovviamente, prestare attenzione a questo ...

+22

Ciò significa che hai l'opzione zsh non predefinita 'NOCLOBBER' impostata. Usa 'setopt clobber' per ripristinare il comportamento predefinito. –

2
#!/bin/bash 

cat <<EOF > SampleFile 

Put Some text here 
Put some text here 
Put some text here 

EOF 
1

Se si dispone di output che può avere errori, si consiglia di utilizzare una e commerciale e 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).

+4

Potrebbe essere vero, ma non è correlato alla domanda. – Deiwin

34

In Bash, se è stato impostato noclobber alla set -o noclobber, quindi si utilizza la sintassi >|

Ad esempio:

echo "some text" >| existing_file

Questo funziona anche se il file non esiste ancora


  • Controllare se noclobber è impostato con: set -o | grep noclobber

  • Per una spiegazione più dettagliata su questo speciale tipo di operatore, vedere this post

  • Per un elenco più esaustivo degli operatori di reindirizzamento, fare riferimento a this post

+0

Grazie, funziona anche per zsh. –

Problemi correlati