Установка переменной окружения LD_PRELOAD для запуска команд без ввода полного пути

Я играю с LD_PRELOAD и создал библиотеку, которая просто оборачивает puts() в функцию, которая преобразует строку для печати в верхний регистр перед печатью. Затем я экспортирую переменную LD_PRELOAD как таковую

$ export LD_PRELOAD=/home/adrian/test/myputs.so

Теперь поведение работает должным образом при выполнении команды

$ /bin/pwd
/HOME/ADRIAN/TEST

Но это не работает при таком запуске

$ pwd
/home/adrian/test

Какой механизм вызывает игнорирование переменной среды LD_PRELOAD в этом случае?


person eltommo    schedule 25.04.2012    source источник


Ответы (1)


Поскольку pwd равно shell builtin command — см. man bash или документацию здесь. Итак, если вы пишете

$ pwd

Затем запускается встроенная команда. Если вы укажете ему путь, он выполнит двоичный файл ELF и будет использовать файл LD_PRELOAD.

person Tomas    schedule 25.04.2012
comment
Спасибо! После быстрого поиска я обнаружил, что могу отключить встроенный pwd с помощью enable -n pwd, и теперь он ведет себя так, как ожидалось. - person eltommo; 25.04.2012
comment
@eltommo, вау, я не знал о такой возможности. Интересно! - person Tomas; 25.04.2012