我想创建一个名为 的 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。