我在 .bashrc 中设置了一些别名(按此顺序):
alias ls="lsc"
alias lsc='ls -Flatr --color=always'
alias lscR='ls -FlatrR --color=always'
Run Code Online (Sandbox Code Playgroud)
alias
采购后确认:
alias ls='lsc'
alias lsc='ls -Flatr --color=always'
alias lscR='ls -FlatrR --color=always'
Run Code Online (Sandbox Code Playgroud)
我可以ls
很好地运行新别名,它会链接到 lsc 别名,然后执行与 lsc 别名关联的命令。我也可以运行lscR
,它按预期运行。
如果我尝试自己运行lsc
,我会得到:
$ lsc
lsc: command not found
Run Code Online (Sandbox Code Playgroud)
知道为什么外壳在这种情况下似乎隐藏/隐藏了 lsc 别名吗?(我意识到当我可以在这里运行 'ls' 来获得相同的结果时运行 'lsc' 毫无意义,但我正在尝试了解这种情况下的 shell 行为)。
编辑:问题答案中提供的(bash)shell 行为的以下解决方法。
已经为原始问题提供了一些非常有用的答案。为了缩短答案中解释的扩展行为,似乎至少有两种方法可以防止第二个别名尝试扩展您已经使用别名的命令。例如,如果您有alias cmd='cmd --stuff'
覆盖名为 的本机命令cmd
,则可以通过以下方式防止使用“cmd”别名代替cmd
其他别名中的本机命令:
(感谢 wjandrea 对第一种方法的评论)
cmd
在另一个别名中以“command”作为前缀,例如alias other-cmd-alias='command cmd --other-stuff'
或者,
alias other-cmd-alias='\cmd --other-stuff' …
bash ×1