Qual è la differenza tra “>” e “>>”?


12

Qual è la differenza tra ls >e ls >>? Devo capirlo per il mio calcolo GCSE ma non so quale sia la differenza.


1
Oltre alla bella risposta di seguito, vedere la seconda (e più votata) risposta su stackoverflow.com/a/984761/1841533: l'uso di >> per scrivere su un file (es: un registro) ha anche il piacevole effetto collaterale di non devono apparire i caratteri "Nul" all'inizio del file saif se il file viene troncato mentre il processo continua a scriverlo! (es: durante la rotazione del file di registro). Poiché "foo> file" non cerca, non nota la modifica delle dimensioni e punta ancora oltre l'inizio, e il sistema operativo si riempie di Nul. foo >> cerca il file e quindi punta alla nuova posizione (l'inizio).
Olivier Dulac il

Poiché questa è una domanda educativa, ti suggerisco di imparare a lavorare con la documentazione pertinente: Manuale di riferimento di Bash, sezione "Reindirizzamenti" (accessibile anche tramite man bash).
David Foerster il

Risposte:


28

>e >>sono operatori di reindirizzamento; trasferiscono l'output di qualcosa, in questo caso ls, altrove. Se questo output passa a un file, >troncherà il file, ovvero eliminerà qualsiasi contenuto precedente, mentre >>aggiungerà nuovi dati alla fine del file, mantenendo il contenuto precedente. Funzionerà con qualsiasi input, quindi echoe cat, ad esempio, può anche essere usato in questo modo.

Interessante anche l' |operatore, che passa i dati a un'altra applicazione, quindi ls | cat -nti darà un elenco con numero di riga!

Tubi è il termine pertinente.


2
Tronca o sovrascrivi?
DK Bose,

2
@DKBose da straceoutput per bash -c 'echo a > blah': open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666), in modo da troncare sarebbe il termine giusto.
Muru,

"pipe" e anche "reindirizzamento dell'output", che hai usato in qualche modo nella tua risposta. Molto bene.
0x Sheepdog,

trovato quello che volevo dire: Oltre a questa bella risposta, si prega di vedere il 2 ° (e la maggior parte upvoted) risposta sul stackoverflow.com/a/984761/1841533 : usando >>per scrivere in un file (es: un log) ha anche il lato bello effetto per non visualizzare i caratteri "Nul" all'inizio del file saif se il file viene troncato mentre il processo continua a scriverlo! (es: durante la rotazione del file di registro). Poiché "foo> file" non cerca, non nota la modifica delle dimensioni e punta ancora oltre l'inizio, e il sistema operativo si riempie di Nul. foo >>filecerca e quindi indica la nuova posizione (l'inizio).
Olivier Dulac il

5

I simboli >e >>vengono utilizzati per reindirizzare l'output su un file.

Entrambi creeranno il file se il file non esiste. Se il file esiste già, quindi >sovrascriverà il file dove >>verranno aggiunti i dati al file.

Quindi ls > myfilecreerà un documento chiamato myfilese non esiste. Se myfileè già presente e contiene alcuni dati, verranno sovrascritti con i nuovi dati che vengono passati.

Considerando ls >> myfileche creerà un file se non esiste e scriverà i dati su di esso. Se il file esiste con alcuni dati, i nuovi dati vengono aggiunti alla fine.


0

Se usi un singolo>, sovrascriverà il file se esiste già. Fai molta attenzione quando usi questo.

Se usi due >>, aggiungerà semplicemente (in altre parole, inizia a scrivere in fondo al file) se esiste già. Altrimenti, crea un nuovo file se non esiste.


1
Perché ripetere una risposta che è già stata data?
Requist
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.