我想在输入新目录时执行特定的bash功能。有些想法:
alias cd="cd $@ && myfunction"
$@
在那里不起作用,添加反斜杠无济于事。我也有点担心搞乱cd,如果这对其他更改目录的命令起作用会更好,例如pushd
和popd
。
任何更好的别名/命令?
答案 0 :(得分:20)
别名不接受参数。你应该使用一个功能。每次发出提示时都不需要自动执行它。
function cd () { builtin cd "$@" && myfunction; }
builtin
关键字允许您在不创建递归的情况下重新定义Bash内置函数。引用参数使其在目录名称中有空格时起作用。
对于几乎所有目的,shell函数优先于别名。
答案 1 :(得分:19)
我能想出的最简单的解决方案是
myfunction() {
if [ "$PWD" != "$MYOLDPWD" ]; then
MYOLDPWD="$PWD";
# strut yer stuff here..
fi
}
export PROMPT_COMMAND=myfunction
应该这样做。它将与所有命令一起使用,并在显示提示之前触发。
答案 2 :(得分:7)
答案 3 :(得分:2)
我编写了一个ZSH脚本,它利用回调函数chpwd
来获取项目特定的ZSH配置。我不确定它是否适用于Bash,但我认为值得一试。如果它没有在您正在进入的目录中找到脚本文件,它将检查父目录,直到找到要发送的脚本(或直到它到达/
)。当cd退出目录时,它还会调用函数unmagic
,这样可以在离开项目时清理环境。
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
}