我到处搜寻,但找不到任何结论。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 -- +=somethingzsh 编写。不要以为emulate改变。
                    ~/.shrc由于Bourne Shell具有最强大的别名实现,但zsh使用不兼容的选项名称,因此请务必谨慎。在Bourne Shell中alias -g创建一个持久别名$HOME/.globals。仅在不超过POSIX功能的情况下,共享别名定义才是安全的。
                    zsh的alias允许使用全局别名,而bashs仅在行的开头扩展。
在zsh:
alias -g L="| less -FRX"然后,您可以执行以下操作:
verbose-command L有关有用的全局别名的列表,请参见此处。