Pour faire court: je voudrais suivre la façon dont certains exécutables sont appelés pour suivre certains comportements du système. Disons que j'ai un exécutable:
/usr/bin/do_stuff
Et il est en fait appelé par un certain nombre de noms différents via un lien symbolique:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
etc. De toute évidence, do_stuff
va utiliser le premier argument qu'il reçoit pour déterminer quelle action est réellement prise, et le reste des arguments sera traité à la lumière de cela.
Je voudrais enregistrer chaque appel à /usr/bin/do_stuff
(et la liste complète des arguments). S'il n'y avait pas de liens symboliques, je voudrais simplement passer do_stuff
à do_stuff_real
et d' écrire un script
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Cependant, comme je sais qu'il examinera le nom par lequel il est appelé, cela ne fonctionnera pas. Comment peut-on écrire un script pour atteindre le même résultat tout en transmettant le do_stuff
bon «nom utilisé exécutable»?
Pour mémoire, pour éviter les réponses sur ces lignes:
- Je sais que je peux le faire en C (en utilisant execve), mais ce serait beaucoup plus facile si je pouvais, dans ce cas, simplement utiliser un script shell.
- Je ne peux pas simplement remplacer
do_stuff
par un programme de journalisation.