代码之家  ›  专栏  ›  技术社区  ›  Paul Biggar

在进入目录时执行bash函数

  •  18
  • Paul Biggar  · 技术社区  · 14 年前

    alias cd="cd $@ && myfunction"
    

    $@ 在那里不起作用,加反斜杠也没用。我也有点担心弄乱cd,如果这对其他改变目录的命令有用的话,那就更好了,比如 pushd popd .

    有更好的别名/命令吗?

    4 回复  |  直到 14 年前
        1
  •  20
  •   falstro    14 年前

    我能想到的最简单的解决办法是

    myfunction() {
      if [ "$PWD" != "$MYOLDPWD" ]; then
        MYOLDPWD="$PWD";
        # strut yer stuff here..
      fi
    }
    
    export PROMPT_COMMAND=myfunction
    

    应该这样做。它将与所有命令一起工作,并将在显示提示之前触发。

        2
  •  22
  •   Dennis Williamson    14 年前

    function cd () { builtin cd "$@" && myfunction; }
    

    这个 builtin 关键字允许您重新定义Bash内置项,而无需创建递归。如果目录名中有空格,引用参数可以使其正常工作。

    这个 Bash docs

    对于几乎所有的用途,shell函数都比别名更受欢迎。

        3
  •  8
  •   cxreg    12 年前

    还有其他一些版本,包括

    它们都支持bash和zsh

        4
  •  2
  •   Alexis Wilke    5 年前

    我已经使用回调函数编写了一个ZSH脚本 chpwd / ). 它还调用函数 unmagic 当cd'ing离开目录时,它允许您在离开项目时清理环境。

    http://github.com/jkramer/home/blob/master/.zsh/func/magic

    export BASE=$PWD # needed for another script of mine that allows you to cd into the projects base directory by pressing ^b
    
    ctags -R --languages=Perl $PWD # update ctags file when entering the project directory
    
    export PERL5LIB="$BASE/lib"
    
    # function that starts the catalyst server
    function srv {
      perl $BASE/script/${PROJECT_NAME}_server.pl
    }
    
    # clean up
    function unmagic {
      unfunction src
      unset PERL5LIB
    }