redirezione di uscita non funziona per un certo programma
-
10-10-2019 - |
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.
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.