我到处搜寻,但找不到任何结论。zsh中的alias命令和bash中的alias命令之间有区别吗?如果不是,这是否意味着我可以在两个shell之间共享一组别名,并期望它们能够按预期工作?
我到处搜寻,但找不到任何结论。zsh中的alias命令和bash中的alias命令之间有区别吗?如果不是,这是否意味着我可以在两个shell之间共享一组别名,并期望它们能够按预期工作?
Answers:
该alias
命令的语法在所有Bourne样式的shell中都相同。所以,你可以在分享~/.zshrc
,~/.bashrc
,~/.kshrc
,~/.shrc
,只要他们让所有的炮弹感。
只要您使用所有外壳程序都支持的语法子集,变量定义和函数定义也一样。
如果您不使用低于4.0的zsh版本,则可以将所有与Shell无关的定义放在一个名为(say)的文件中~/.common.rc.sh
,其中第一行是
emulate -LR sh 2>/dev/null
这告诉zsh仅在此文件中包含sh兼容语法。然后来源,接近年初的文件~/.bashrc
,~/.bashrc
,~/.kshrc
等等。
这基本上就是我要做的。例如,我有几分复杂的代码,对产生的别名ls
与取决于什么可用我最喜欢的选项(--color
,-G
,-F
等); 它与外壳无关,所以进来.common.rc.sh
。我也有依赖于shell的别名,例如alias zcp='zmv -C'
in .zshrc
。
/bin/sh
在我的别名文件的顶部放置一个shebang,它将按我打算用于所有shell的方式工作吗?
#!
一行:这不是一个独立的脚本,只能从另一个脚本中获取。#!
无论如何都不会改变外壳的行为。
alias
对待+
以引入选项作为开头的参数-
,因此alias +=something
必须用alias -- +=something
zsh 编写。不要以为emulate
改变。
~/.shrc
由于Bourne Shell具有最强大的别名实现,但zsh
使用不兼容的选项名称,因此请务必谨慎。在Bourne Shell中alias -g
创建一个持久别名$HOME/.globals
。仅在不超过POSIX功能的情况下,共享别名定义才是安全的。
zsh
的alias
允许使用全局别名,而bash
s仅在行的开头扩展。
在zsh
:
alias -g L="| less -FRX"
然后,您可以执行以下操作:
verbose-command L
有关有用的全局别名的列表,请参见此处。