忽略别名很好吗?

忽略别名很好吗?

alias rm='rm -i'我的文件中有~/.bashrc(我刚刚了解到它是被认为是不好的做法由一些)。

运行它时似乎没有考虑别名nice

bli@naples:~$ touch test
bli@naples:~$ rm test
rm: remove regular empty file 'test'? n
bli@naples:~$ nice rm test
bli@naples:~$ 

为什么会这样?

答案1

默认情况下,nice是一个外部命令:

$ command -v nice
/usr/bin/nice

这意味着它不知道别名,这是 shell 功能:

$ alias foo='echo hello'
$ foo
hello
$ nice foo
nice: foo: No such file or directory

然而,shell 有一个功能允许别名扩展更多别名。您以空格结束展开。

$ alias nice='/usr/bin/nice '

找到最后的那个空格;这一点很重要。

现在...

$ nice foo
hello
$ command -v nice
alias nice='/usr/bin/nice '

如果您希望 shell 进行别名扩展,则任何外部命令都可以使用这样的别名进行包装。

答案2

nice不是bashbash替换别名,而不替换别名nice。使用别名是 bash 独有的功能。还有 zsh、ksh、...so:shell 功能。nice不是一个外壳。

答案3

nice将使用系统调用之一exec(3),该系统调用对 shell 别名一无所知。全局别名替换可以在某些 shell(例如 ZSH)中完成,尽管我认为它是一个巨大的枪,我只是将它作为对未来 10 代的警告而提及:

% alias -g rm='rm -i'
% echo hi rm there
hi rm -i there
% 

相关内容