Per farla breve: vorrei tracciare il modo in cui vengono chiamati alcuni eseguibili per tenere traccia del comportamento del sistema. Diciamo che ho un eseguibile:
/usr/bin/do_stuff
Ed è in realtà chiamato da un numero di nomi diversi tramite symlink:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
e così via. Chiaramente, do_stuff
utilizzerà il primo argomento ricevuto per determinare quale azione viene effettivamente intrapresa, e il resto degli argomenti verrà gestito alla luce di ciò.
Vorrei registrare mai chiamare /usr/bin/do_stuff
(e l'elenco completo degli argomenti). Se non ci fossero collegamenti simbolici, vorrei semplicemente muovo do_stuff
per do_stuff_real
e scrivere uno script
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Tuttavia, poiché so che esaminerà il nome da cui viene chiamato, questo non funzionerà. Come si può scrivere uno script per ottenere lo stesso, ma passare comunque al do_stuff
giusto 'nome usato eseguibile'?
Per la cronaca, per evitare risposte su queste righe:
- So che posso farlo in C (usando execve), ma sarebbe molto più semplice se potessi, in questo caso, usare solo uno script di shell.
- Non posso semplicemente sostituire
do_stuff
con un programma di registrazione.