У меня есть 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 об псевдонимах, даже если захочет.