Domanda

Su Linux, sto cercando di reindirizzare stdout da un'applicazione console in un file invece di console. Non ho il codice sorgente. Ho provato diversi metodi, ma tutto ha comportato un file vuoto. Senza reindirizzamento uscita tutto funziona bene (vedo i messaggi della console).

ho provato, per esempio:

progname > out.txt
progname > out.txt 2&>1

E nulla appare in out.txt e nella console.

Ho cercato di eseguire l'applicazione con strace. Quando non utilizzare il reindirizzamento, vedo linee come -

write(1, "bla bla", 8)

Quando mi presento redirezione dell'output, non ci sono le chiamate di scrittura a tutti, che mi fa pensare l'applicazione sta testando per qualcosa prima di scrivere il messaggio. Qual è l'applicazione cercando? Come posso bypass vero?

sto usando CentOS 5.5 e Bash.

È stato utile?

Soluzione

In base alla tua strace suona come il programma sta testando se stdin e / nostro stdout è un tty. Non ho mai usato, ma si potrebbe provare a utilizzare empty.sourceforge.net. Si supponga di creare una pseudo-tty che dovrebbe ingannare la verifica del programma.

Altri suggerimenti

progname > out.txt 2>&1

Modifica : Se effettivamente fatto questo ed è stato un errore di battitura nella tua domanda. Potrebbe essere possibile che l'applicazione verifica se l'uscita è un TTY.

Edit2: Ok, in tal caso, provare script -qc progname > out.txt > 2>&1

In Debian / Ubuntu, script è una parte del pacchetto bsdutils che è un pacchetto essenziale e sempre installata.

Provare per reindirizzare un unico flusso in un momento di / dev / null, per vedere quale esso stampa su:

progname > /dev/null
progname 2> /dev/null

Poi vedrete quale flusso si deve catturare. Per motivi tecnici alcuni programmi stampare i messaggi informativi anche su stdout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top