又一个 shell 小技巧

上次介绍的通过写 shell 函数的小技巧,大家觉得不错。今天继续分享一个。不过在正文之前先更正下上篇文章的两个错误。

b06f99c550a16d8daf4e143c61d35e4c.jpeg

function b {
# $# 命令参数个数, $* 参数列表
    if [ $# -eq 0 ]
    then
        npm run build
    else
        npm run build -- $* 
    fi
}

第一个错误是,$* 在使用的时候最好放在双引号里面括起来"$*",可以减少一些转义的错误。

第二个错误需要点篇幅。"$*" 和 "$@" 这两个变量表示的都是除命令之外的所有参数。但是有一个明显的不同是,"$@"的值还是一个参数列表,而"$*" 则会变成一个参数。用 node.js 的伪代码翻译下。

// 注意看第二个参数
//  $@
spawn('cmd', ['argv1',  'argv2'])
//  $*
spawn('cmd', ['argv1 argv2'])

所以大多数情况下,优先使用 "$@" 是一个正确的选择。大家如果要看看实际的例子就是去本地 node_modules/.bin 目录随便查看一个命令文件,比如 umi 你就发现它用就是 "$@" 而且的用了双引号。(和学霸对下答案,发现自己是不是进步了啊?)

if [ -x "$basedir/node" ]; then
  exec "$basedir/node"  "$basedir/../umi/bin/umi.js" "$@"
else
  exec node  "$basedir/../umi/bin/umi.js" "$@"
fi

正文

开始说今天的技巧,上次说了做了 r 别名来代替 npm run, 但是有一个问题是,r 在使用的时候是没有任何提示的;作为一个懒惰的CLI 用户是不允许的。为了有提示,做以下步骤:

  1. 1. 安装 https://github.com/cykerway/complete-alias  到 PATH 路径 

  2. 2. 然后增加 alias complete 的配置

举例:

alias r="npm run"
complete -F _complete_alias r

在用 r 命令的时候两下  tab  就有提示了。

还没有结束

e033d439dd9c9593fff75ddd54223b8a.png

如果你配置一个别名,既能有自动提示,也要有一些简单判断逻辑怎么办?上一篇文章不是刚说,alias 没有逻辑判断能力,才去定义fuction的啊,怎么现在又既要也要了。我们先把问题在具象点,比如我想给  git  做一个别名 g,  如果只输入 g 的时候,执行 git status, 但是使用 g checkout some-branch 又能变成 git checkout some-branc

方法很简单, 看下面的注释即可。

alias g="git"
# 定义完 g 是 git 别名后使用 `_complete_alias` 定义好自动补全函数
complete -F _complete_alias g

# 定义一个 bash 函数,为 fn_g,  在这个里面实现判断参数的逻辑
function fn_g {
if [ $# -eq 0 ]
  then
    git status
  else
    git "$@"
  fi
}
# 最后一个妙招,偷天换日,直接换掉 alias 的别名,
# 这样 g 别名同时有了自动补全的能力,还具有了参数判断的能力。
alias g="fn_g"

一个很小的 shell 技巧,希望大家喜欢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值