Reindirizza tutto l’output nel file

So che in Linux, per redirect l’output dallo schermo a un file, posso usare il > o il tee . Tuttavia, non sono sicuro del motivo per cui parte dell’output viene ancora visualizzata sullo schermo e non scritta sul file.

C’è un modo per redirect tutto l’output in un file?

Quella parte è scritta su stderr, usa 2> per ridirigerla. Per esempio:

 foo > stdout.txt 2> stderr.txt 

o se vuoi nello stesso file:

 foo > allout.txt 2>&1 

Nota: questo funziona in (ba) sh, controlla la shell per la syntax corretta

Tutti i sistemi operativi POSIX hanno 3 flussi : stdin, stdout e stderr. stdin è l’input, che può accettare lo stdout o lo stderr. stdout è l’output principale, che viene reindirizzato con > , >> o | . stderr è l’output dell’errore, che viene gestito separatamente in modo che eventuali eccezioni non vengano passate a un comando o scritte in un file che potrebbe interrompersi; normalmente, questo viene inviato ad un log di qualche tipo, o scaricato direttamente, anche quando lo stdout viene reindirizzato. Per redirect entrambi nello stesso luogo, utilizzare:

command &> /some/file

EDIT : grazie a Zack per aver sottolineato che la soluzione di cui sopra non è portatile – utilizzare invece:

 *command* > file 2>&1 

Se vuoi silenziare l’errore, fai:

 *command* 2> /dev/null 

Per ottenere l’output sulla console E in un file file.txt per esempio.

 make 2>&1 | tee file.txt 

Nota: & (in 2>&1 ) specifica che 1 non è un nome di file ma un descrittore di file.

Usa questo – "require command here" > log_file_name 2>&1

Descrizione dettagliata dell’operatore di reindirizzamento in Unix / Linux.

L’operatore> reindirizza di solito l’output su un file ma può essere indirizzato a un dispositivo. Puoi anche usare >> per aggiungere.

Se non si specifica un numero, viene assunto il stream di output standard, ma è anche ansible redirect gli errori

 > file redirects stdout to file 1> file redirects stdout to file 2> file redirects stderr to file &> file redirects stdout and stderr to file 

/ dev / null è il dispositivo null che prende qualsiasi input desiderato e lo getta via. Può essere usato per sopprimere qualsiasi output.

Crediti a osexp2003 e ja …


Invece di mettere

 &>> your_file.log 

dietro una linea in

 crontab -e 

Io uso

 #!/bin/bash exec &>> your_file.log … 

all’inizio di uno script BASH.

Vantaggio: hai le definizioni di registro all’interno del tuo script. Buono per Git ecc.

Potrebbe essere l’errore standard. Puoi ridirigerlo:

 ... > out.txt 2>&1 

Comando:

 foo >> output.txt 2>&1 

aggiunge al file output.txt , senza sostituire il contenuto.

È ansible utilizzare il comando exec per redirect tutti gli output stdout / stderr di qualsiasi comando in seguito.

script di esempio:

 exec 2> your_file2 > your_file1 your other commands..... 

Usa >> per aggiungere:

command >> file

In Linux Mint, questa stringa di comando ha indirizzato lo script di esecuzione e gli errori in un singolo file txt. bash -x ./setup.sh > setup.txt 2>&1 . Il nome dello script era setup.sh e la destinazione di output era setup.txt.