Я хотел бы сделать что-то вроде этого, который создает сценарий оболочки журнала для замены ln
(пойти и скопировать и вставить):
l=$(which ln)
mv $l $l.bak
cat <<'EOF' >$l
#!/bin/bash
if grep -Eqw -- -s <<<"$@"
echo "Symbolic link created by command: ln $@" >>/tmp/link_log
fi
<sed>
EOF
sed "s/<sed>/$l.bak/" -i $l
chmod +x $l
Теперь вы можете запустить make
, и ваш новый ln
зарегистрирует создание символической ссылки в /tmp/link_log
, и он все равно будет создавать ссылки так же, как и должен, так как он передает свои аргументы реальному ln
.
Чтобы положить все обратно:
l=$(which ln)
mv $l.bak $l
Надеюсь это поможет!
РЕДАКТИРОВАТЬ
Как указано в комментариях, это не всеобъемлющее.
Вот лучший способ сделать это:
cat <<'EOF' >/tmp/symlink_only.c
#include <unistd.h>
int link(const char *path1, const char *path2)
{
return symlink(path1, path2);
}
int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags)
{
return symlink(oldpath, newpath);
}
gcc -Wall -fPIC -shared -o /tmp/symlink_only.so /tmp/symlink_only.c -ldl
И тогда вы можете запустить свою <program>
следующим образом: LD_PRELOAD=/tmp/symlink_only.so <program>
. Он должен работать; Я проверил это с помощью ln
.
Затем положить все обратно: rm /tmp/symlink_only.{c,so}
.