Ho un certo eseguibile Linux che viene chiamato da un'applicazione più grande per eseguire alcuni calcoli. Voglio modificare il modo in cui vengono eseguiti i calcoli, per questo devo prima capire come viene chiamato l'eseguibile e in che modo vengono trasferiti i parametri e i dati.
Quindi, vorrei monitorare i parametri della riga di comando, stdin e stdout se questo eseguibile viene chiamato. Il normale funzionamento dell'eseguibile non dovrebbe essere disturbato.
C'è un modo semplice per farlo?
Aggiornamento:
Ho provato l'idea del segnaposto dello script di shell per acquisire tutti i dati utilizzando il seguente script:
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "[email protected]" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
Funziona bene per l'input di test, ma si blocca solo se viene chiamato per davvero. Probabilmente sta succedendo anche più di quanto sospettassi.
Risposta accettata:
L'opzione 1 sarebbe quella di modificare il codice sorgente dell'app chiamante e inserire tee
nella pipeline di output per ottenere una copia dell'output per la revisione in quella fase.
L'opzione 2 sarebbe quella di scrivere uno script wrapper attorno all'eseguibile in questione. Uno script rapido che trasmette stdin e argomenti all'app reale, quindi tee è l'output in una posizione che puoi rivedere e lo sputa indietro nello stesso modo in cui l'app dovrebbe essere solo un paio di righe da montare. Mettilo in un posto speciale e aggiungi quella posizione all'inizio della tua variabile PATH, quindi esegui la tua applicazione.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output