У меня есть aliasнабор для моей rmкоманды. Если я запускаю aliasкоманду, это то, что я получаю в качестве вывода.
alias rm='rm -i'
Теперь, когда я запускаю rmкоманду, она работает нормально, как и ожидалось.
rm ramesh
rm: remove regular empty file `ramesh'? y
Теперь я изучал системные вызовы, которые вызываются при выполнении команды. Для этого я должен знать о straceкоманде из здесь , которые перечислены мне , что файлы, которые вызываются когда я выполнить какую - либо команду. Команда как ниже.
strace -ff -e trace=file rm ramesh 2>&1
Команда работает отлично, за исключением того, что она игнорирует мои псевдонимы, которые у меня есть для моей rmкоманды. Удаляет файл без запроса пользователя.
Итак, straceигнорирует псевдонимы, как это? Если так, то почему?
РЕДАКТИРОВАТЬ:
Не уверен, если это что-то делать, но type -a rmдает мне вывод, как,
rm is aliased to `rm -i'
rm is /bin/rm
Так что же, /bin/rmв данном случае это рассматривается, поэтому пользователь не получает запрос перед удалением?
straceиспользовать псевдоним, вам нужна straceоболочка, которая реализует псевдоним. Для этого есть несколько подходов: strace -p $$ &или strace bashили strace sh -c 'rm ramesh'(последний также игнорирует псевдоним, но по совершенно другой причине.)
straceне игнорирует псевдонимы, потому что это означало бы, что в первую очередь было что игнорировать. Псевдоним - это особенность оболочки.straceэто другая программа, и внутриstraceпонятия псевдонимов не существует, поэтому игнорировать нечего. API, предоставляемый ядром для выполнения программ, также не имеет понятия псевдонимов, поэтому оболочка не может сказать strace об псевдонимах, даже если захочет.