Bash在cd进入目录时自动启动脚本

JerryXia 发表于 , 阅读 (19)

玩android代码进入目录后总是需要source build/envsetup.sh, 比较烦, 能不能在cd进入时自动完成这个功能呢?

可以的, 首先我们在.bashrc中重新定义cd这个函数:

mycd() {      \cd $@      local hook_file=.cd_hook      if [[ -f $hook_file ]]; then          . $hook_file      fi  }   alias cd='mycd'  

这样, 在进入一个目录后就会检测该目录下是否有.cd_hook文件, 如果有的话就自动source之.然后我们在源代码目录下新建一个.cd_hook文件:

type lunch >/dev/null 2>&1  # 用检测lunch函数是否有的方式确定是不是已经source过了  if [[ $? -ne 0 ]]; then      source build/envsetup.sh  fi  

注意, 这样修改cd是有一定安全性问题的, 因为恶意程序可以在目录下放置.cd_hook文件来做任何事情. 因此最好还是不要alias cd. 在实际使用的时候, 我用的是alias c='mycd', 这样我只有用”c”命令进入目录时会运行.cd_hook.

顺便提一句, 在脚本中, 为了防止alias, 可以用\转义. 例如\ls ~会确保调用的不是alias后的ls.