risposta-alla-domanda-sullo-sviluppo-web-bd.com

Reindirizza tutto l'output su file

So che in Linux, per reindirizzare l'output dallo schermo a un file, posso utilizzare > o 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 reindirizzare tutto l'output in un file?

682
Rayne

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 tua sintassi corretta per Shell

1084
Op De Cirkel

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 reindirizzare entrambi nello stesso luogo, utilizzare:

command &> /some/file

EDIT: grazie a Zack per aver sottolineato che la soluzione di cui sopra non è portabile - usa invece:

*command* > file 2>&1 

Se vuoi silenziare l'errore, fai:

*command* 2> /dev/null
138
Bryan Agee

Per ottenere l'output sulla console AND 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.

78
Sagar Jain

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 considerato il flusso di output standard, ma è anche possibile reindirizzare 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.

43
Indrajeet Gour

Crediti a osexp2003 e j.a. ...


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.

27
qräbnö

Potrebbe essere l'errore standard. Puoi ridirigerlo:

... > out.txt 2>&1
15
Petar Ivanov

Comando:

foo >> output.txt 2>&1

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

15
ellockie

È possibile utilizzare il comando exec per reindirizzare tutti gli output stdout/stderr di eventuali comandi in seguito.

script di esempio:

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

Usa >> per aggiungere:

command >> file

7
khushi muhammad