Mám určitý spustitelný soubor Linuxu, který je volán z větší aplikace, aby provedl nějaké výpočty. Chci upravit způsob provádění výpočtů, k tomu musím nejprve pochopit, jak se spustitelný soubor nazývá a jakým způsobem se přenášejí parametry a data.
Rád bych tedy sledoval parametry příkazového řádku, stdin a stdout, pokud je tento spustitelný soubor volán. Normální provoz spustitelného souboru by neměl být narušen.
Existuje snadný způsob, jak to udělat?
Aktualizace:
Vyzkoušel jsem myšlenku zástupného symbolu skriptu shell získat všechna data pomocí následujícího skriptu:
#!/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
To funguje dobře pro testovací vstup, ale pouze se zasekne, pokud je volán skutečně. Pravděpodobně se toho děje ještě víc, než jsem tušil.
Přijatá odpověď:
Možnost 1 by byla upravit zdrojový kód volající aplikace a vložit tee
do výstupního potrubí, abyste získali kopii výstupu pro kontrolu v této fázi.
Možnost 2 by byla napsat obalový skript kolem příslušného spustitelného souboru. Rychlý skript, který předá stdin a argumenty skutečné aplikaci, pak je výstupem na místo, které si můžete prohlédnout, a také jej vyplivne stejným způsobem, jakým by aplikace měla být jen pár řádků. Umístěte to na nějaké speciální místo a přidejte toto umístění na začátek proměnné PATH a poté spusťte aplikaci.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output