为什么strace忽略我的rm别名?

拉梅什

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这种情况,这就是为什么在删除之前不提示用户的原因?

斯蒂芬·查泽拉斯

stracerm -i出于以下原因而无法运行

echo rm

不输出rm -i

别名是少数几个Shell的功能,当在命令位置找到某些字符串时,它们会自动被其他字符串替换。

在:

alias foo='whatever'
foo xxx

外壳将其扩展为:

whatever xxx

并且经过另一轮解释,在这种情况下导致执行whatever命令。

仅当在命令位置找到别名(作为命令行的第一个单词)时,别名才会扩展。

zsh支持全局别名。

您可以这样做:

alias -g rm='rm -i'

但是您不想要,因为那意味着:

echo rm

rm -i例如将输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章