GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando Shuf File> File lascia un file vuoto, ma comandi simili no??

Questa domanda ha già risposte qui :Perché `cat`ing un file in se stesso lo cancella? [duplicato]

(2 risposte)
Chiuso 2 anni fa.

So che questa è una specie di duplicato di un'altra domanda (perché questo comando di ordinamento mi dà un file vuoto?), ma volevo espandere la domanda in risposta alle risposte fornite.

Il comando

shuf example.txt > example.txt

Restituisce un file vuoto, perché la shell tronca il file prima di mescolarlo, lasciando solo un file vuoto da mescolare. Tuttavia,

cat example.txt | shuf > example.txt

produrrà un file mescolato come previsto.

Perché il metodo della pipeline funziona quando il semplice reindirizzamento non funziona? Se il file viene troncato prima dell'esecuzione dei comandi, anche il secondo metodo non dovrebbe lasciare un file vuoto?

Risposta accettata:

Il problema è che > example.txt inizia a scrivere su quel file, prima di shuf example.txt inizia a leggerlo. Quindi, poiché non c'era ancora alcun output, example.txt è vuoto, shuf legge un file vuoto e come shuf non produce output in questo caso, il risultato finale rimane vuoto.

L'altro tuo comando potrebbe soffrire dello stesso problema. > example.txt potrebbe terminare il file prima di cat example.txt inizia a leggerlo; dipende dall'ordine in cui la shell esegue queste cose e da quanto tempo impiega cat per aprire effettivamente il file.

Per evitare del tutto tali problemi, puoi utilizzare shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txt .

Oppure potresti usare shuf example.txt --output=example.txt invece.


Linux
  1. 8 comandi inquietanti che perseguitano il terminale

  2. Perché il file di traduzione Bash non contiene tutti i testi di errore?

  3. Il comando "java" non esegue la JVM che è stata installata

  4. In che modo il comando stat calcola i blocchi di un file?

  5. Come salvare l'output di questo comando awk su file?

La differenza tra più, meno e la maggior parte dei comandi

5 comandi Linux oscuri ma utili per gli amministratori di sistema

5 comandi per visualizzare il contenuto di un file nella riga di comando di Linux

Pratici comandi Tee Linux e Unix per l'amministratore Linux

Core scaricato, ma il file core non si trova nella directory corrente?

Il comando sed di Linux non modifica il file di destinazione