我四处搜寻但找不到任何结论性的东西。 zsh中的alias命令和bash中的alias命令有区别吗?如果不是,这是否意味着我可以在两个 shell 之间共享一组别名并期望它们按我的预期工作?
答案1
该命令的语法alias
在所有 Bourne 风格的 shell 中都是相同的。因此,您可以在~/.zshrc
、~/.bashrc
、~/.kshrc
、之间共享它们~/.shrc
,只要它们在所有 shell 中都有意义。
只要您使用所有 shell 中支持的语法子集,变量定义和函数定义也是如此。
如果您不使用 4.0 之前的 zsh 版本,则可以将所有与 shell 无关的定义放在名为(例如)的文件中~/.common.rc.sh
,其中第一行是
emulate -LR sh 2>/dev/null
这告诉 zsh 仅在此文件中期望与 sh 兼容的语法。然后在~/.bashrc
、~/.bashrc
等开头附近获取该文件~/.kshrc
。
这基本上就是我所做的。例如,我有一些复杂的代码,它ls
根据可用的选项(--color
、-G
、-F
等)为我最喜欢的选项生成别名;它与 shell 无关,所以进入.common.rc.sh
.我还有与 shell 相关的别名,alias zcp='zmv -C'
就像.zshrc
.
答案2
根据Zsh 工作室别名它们似乎具有相同的语法,因此它们应该可以工作。
答案3
zsh
'salias
允许全局别名,而bash
s 仅在行首展开。
在zsh
:
alias -g L="| less -FRX"
然后你可以这样做:
verbose-command L
看这里获取有用的全局别名列表。