如何为bat工具的自定义shell别名添加参数标记实现所需功能?
自定义mybat函数修改方案
原代码存在的问题
- 参数映射逻辑颠倒:需求中
-a对应--paging=always、-n对应--paging=never,原代码中两者赋值写反 - 未传递文件参数:调用bat时没有传入解析选项后剩余的文件路径参数,无法读取指定文件
- 缺少选项移位操作:getopts解析完成后未移除已处理的选项参数,无法正确提取后续的文件路径
- 无默认值兜底:未输入
-a/-n参数时$value为空,会导致bat执行报错
修改后可用代码
mybat() { local OPTIND value # 默认分页逻辑可根据自身需求调整,可选值为auto/always/never value="auto" while getopts ":an" option; do case $option in a) value="always" ;; n) value="never" ;; ?) echo "invalid option: $OPTARG"; return 1 ;; esac done # 移除已解析的选项参数,保留后续文件路径 shift $((OPTIND - 1)) # 传入分页参数和所有文件路径到bat bat --paging="$value" "$@" }
使用示例
- 强制分页打开.zshrc:
mybat -a .zshrc - 关闭分页打开.zshrc:
mybat -n .zshrc - 使用默认分页逻辑打开文件:
mybat .zshrc
内容的提问来源于stack exchange,提问作者Zeroday
相关产品推荐
相关产品推荐

