进入目录后执行bash功能

Pau*_*gar 19 bash cd function

我想在输入新目录时执行特定的bash函数.有些想法:

alias cd="cd $@ && myfunction"
Run Code Online (Sandbox Code Playgroud)

$@在那里不起作用,添加反斜杠也无济于事.我也有点担心与CD搞乱,这将是很好,如果这个工作了哪些改变目录,像其他的命令pushdpopd.

有更好的别名/命令吗?

Pau*_*ce. 21

别名不接受参数.你应该使用一个功能.每次发出提示时都不需要自动执行它.

function cd () { builtin cd "$@" && myfunction; }
Run Code Online (Sandbox Code Playgroud)

builtin关键字允许您重新定义一个内置猛砸而无需创建一个递归.引用参数使其在目录名称中有空格时起作用.

猛砸文档说:

对于几乎所有目的,shell函数优先于别名.


fal*_*tro 19

我能想到的最简单的解决方案就是这个

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

export PROMPT_COMMAND=myfunction
Run Code Online (Sandbox Code Playgroud)

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


cxr*_*reg 7

还有其他一些版本,包括

  • smartcd,我写的,有很多功能,包括模板和临时变量保存
  • ondir,更小,更简单

这两个都支持bash和zsh