Singkat cerita: Saya ingin melacak cara beberapa executable dipanggil untuk melacak beberapa perilaku sistem. Katakanlah saya memiliki executable:
/usr/bin/do_stuff
Dan itu sebenarnya dipanggil oleh sejumlah nama yang berbeda melalui symlink:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
dan seterusnya. Jelas, do_stuff
akan menggunakan argumen pertama yang diterimanya untuk menentukan tindakan apa yang sebenarnya diambil, dan sisa argumen akan ditangani dengan mempertimbangkan itu.
Saya ingin merekam panggilan ke /usr/bin/do_stuff
(dan daftar lengkap argumen). Jika tidak ada symlink, saya hanya akan pindah do_stuff
ke do_stuff_real
dan menulis skrip
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Namun, seperti yang saya tahu bahwa itu akan memeriksa nama yang dipanggil, ini tidak akan berhasil. Bagaimana cara menulis skrip untuk mencapai yang sama tetapi masih meneruskan ke do_stuff
'nama yang dapat dieksekusi'
Sebagai catatan, untuk menghindari jawaban pada baris berikut:
- Saya tahu bahwa saya bisa melakukannya dalam C (menggunakan execve), tetapi akan jauh lebih mudah jika saya bisa, dalam hal ini, cukup gunakan skrip shell.
- Saya tidak bisa begitu saja mengganti
do_stuff
dengan program logging.