先前我们建立了一个 cdtop 函数以方便我们从底层目录跳转到顶层目录,可是问题在于,1. 如何再直接回到底层目录呢?2. 写在 .bashrc 中当然没有太大问题,可毕竟这是关于 gradle 项目的,可不可以把它抽取出来呢?
cdtop 升级版:pushtop
1: pushtop () {
2: working_directory=`pwd`
3: cdtop
4: top_directory=`pwd`
5: if [ $working_directory != $top_directory ]
6: then
7: cd $working_directory
8: pushd $top_directory
9: fi
10: }
使用 pushd 代替 cd 后就可以很方便的使用 popd 跳转回深层目录。考虑到我们的主要目的并不是来回的跳转,而是更好的操作 gradle,所以,使用 pushtop 进一步简化 gradle 的 test 和 dist (我自定义的 distribute 任务)。
加强的 test / dist
在 gradle 中如果测试出错,build 目录下将生成一份测试报告,手动打开很麻烦,所以我们先写一个自动打开浏览器的脚本:testrpt
1: default_browser=opera
2: rpt=build/reports/tests/index.html
3:
4: if [ -s $rpt ]
5: then
6: $default_browser $rpt 2>&1 > /dev/null &
7: fi
这个脚本会判断当前路径(必须是 gradle 项目顶层目录)是否包含了测试报告,如果是,则启动浏览器(opera,大爱)
当然,调用这个脚本的前提是测试失败:
1: gradle_test () {
2: gradle test || testrpt
3: }
现在,可以把测试命令重写成如下代码:
1: alias gtest='pushtop && gradle_test && popd'
使用 gtest 代替 gradle test 可以有两点好处:1. 不需要手动离开当前路径;2. 一旦发现测试错误则自动打开浏览器。
dist 任务则更加简单:
1: alias dist='pushtop && gradle build && gradle dist && gradle clean && popd'
最后,我们把所有的函数和 alias 从 .bashrc 转移到单独的文件 xmetarc 并在 .bashrc 中 source 该文件,大功告成。
还有一个可能会有用的函数是用来进入项目目录的(我的所有项目文件都在一个专用文件夹下),用法是 go (进入项目目录)或 go project-name (进入指定项目)
1: project_home=$HOME/development/projects
2:
3: go () {
4: if (( $# == 0 ))
5: then
6: cd $project_home
7: elif (( $# == 1 ))
8: then
9: cd $project_home/$1
10: else
11: echo "Usage: go project_name"
12: fi
13: }
PS. 其实忙了这么多,用 IDE 不就完了?不尽然,简单说就是鱼和熊掌吧