脚本军火库:回到 Gradle 项目的顶层

在使用 Gradle 的项目中,频繁穿梭于目录层级是常见操作。本文介绍了一个自定义 Bash 函数 `cdtop`,用于从任何子目录快速返回到项目顶层,判断依据是顶层是否存在 `build.gradle` 文件。这个功能可以有效简化在项目中的导航,并避免了使用 pushd / popd 的不便。此外,文章还提及了将类似功能扩展到 Scala、Go 和 C 项目的重构需求。

对于在字符界面下的 Gradle 用户而言,在不同的目录下穿梭是家常便饭。通常进到一个很深的目录并不困难(因为有Bash的自动完成),但想要返回到项目顶层就比较麻烦,以来需要打很多../,二来通常很难搞清楚自己究竟在第几层目录底下。

一个简单的解决方案是 pushd / popd,但是通常我们都是到了需要 pop 的时候才想起来没有事先 push,对吗?

那么,如何在最后关头念一声“回到顶层”就真的如愿呢?让我们在 .bashrc 中添加一个自定义函数 cdtop:

   1: cdtop() {
   2:     prj_dir=
   3:     cur_dir=`pwd`
   4:     while [ -z $prj_dir ]
   5:     do
   6:         if [ -s build.gradle ]
   7:         then
   8:             prj_dir=`pwd`
   9:         else
  10:             cd ..
  11:         fi
  12:  
  13:         if [ `pwd` = / ]
  14:         then
  15:             echo "/"$cur_dir/" does not appear to be part of a Gradle project"
  16:             cd $cur_dir
  17:             break
  18:         fi
  19:     done
  20: }

保存后,加载 .bashrc (或重新登录),就可以通过 cdtop 命令在 Gradle 项目下任何子文件夹跳转到顶层了。

PS. 判断是否到达顶层的原理是看有没有 build.gradle 文件,可以换成其它文件名来支持其它场合的跳转(或者干脆实现成列表)。

PS II. 本来想放在 xmeta 的脚本里的,但执行脚本的话会产生新的进程所以不能改变当前目录。

PS III. 最近把 Scala 也加到 xmeta 里了,但是一想到很快要把 go 和 c 也放进去我就感到不对劲,是时候重构了吧。

Technorati 标签: Script

******

日本震的厉害,虽然不喜欢日本人,但是还是祝他们平安。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值