我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
rm -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] 删除。
我来说两句