Para encurtar a história: eu gostaria de acompanhar o modo como alguns executáveis são chamados para rastrear algum comportamento do sistema. Digamos que eu tenho um executável:
/usr/bin/do_stuff
E na verdade é chamado por vários nomes diferentes via link simbólico:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
e assim por diante. Claramente, do_stuff
usaremos o primeiro argumento recebido para determinar qual ação é realmente executada, e o restante dos argumentos será tratado à luz disso.
Gostaria de gravar sempre chamadas para /usr/bin/do_stuff
(e a lista completa de argumentos). Se não houvesse links simbólicos, eu simplesmente mudaria do_stuff
para do_stuff_real
e escreveria um script
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
No entanto, como eu sei que ele examinará o nome pelo qual é chamado, isso não funcionará. Como alguém escreve um script para obter o mesmo, mas ainda assim passa para do_stuff
o 'nome executável usado' certo?
Para o registro, para evitar respostas nessas linhas:
- Eu sei que posso fazê-lo em C (usando execve), mas seria muito mais fácil se eu pudesse, nesse caso, usar apenas um script de shell.
- Não posso simplesmente substituir
do_stuff
por um programa de registro.