我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也没有别名的概念,因此即使它愿意,shell也无法告诉strace别名。