基于条件的 Bash 别名

基于条件的 Bash 别名

我想创建一个名为 的 bash 别名,pg用于根据条件使用寻呼机程序。条件是:如果most存在则使用它,否则使用less。这是我目前所拥有的:

alias pg='command -v most &> /dev/null && most $1 || less $1'

...但是当我像这样使用它时,pg .gitconfig我得到了most使用输出:

MOST version 5.0.0 (S-Lang version 2.3.2)
Usage:
most [-1Cbcdkstvw] [+/string] [+line number] [+s] [+d] file...
 where: -1:  assume VT100 terminal. (VMS only)
        -b:  Startup in binary mode.
...

至少条件是正常工作的。但是我缺少什么才能让分页器真正显示文件内容呢?

答案1

我同意 Kamil Maciorowki 使用函数的建议,但如果你真的想使用别名,那么可以这样做:

alias pg='command -v most &> /dev/null && _pg=most || _pg=less; $_pg'

原始语法的问题在于,当别名被扩展时,shell 没有真正的方法区分命令和参数。我提出的解决方案很笨拙,但它有效。

唯一的警告是,如果变量$_pg已存在于环境中,则调用此别名将破坏它。这可以通过碰撞检查条件来防止,或者甚至可以使用动态命名的随机变量,或者两者兼而有之……

但是,在这种情况下,我赞同 Kamil 的观点,并建议使用函数而不是别名,而不是将花哨程度提升到 11。

相关内容