如何在 command_not_found_handle 中更改当前工作目录

Fed*_*les 5 bash shell sh bash4

我正在尝试在 Bash 中编写一个未找到的句柄,它执行以下操作:

  1. 如果 $1 存在并且它是一个目录,则cd进入它。
  2. 如果 $1 存在于用户定义的目录中$DEV_DIR,`cd 进入它。
  3. 如果前面的条件不适用,则失败。

现在我有这样的事情:

export DEV_DIR=/Users/federico/programacion/

function command_not_found_handle () {
    if [ -d $1 ]; then          # the dir exists in '.'
        cd $1
    else
        to=$DEV_DIR$1
        if [ -d $to ]; then
            cd $to
            echo `pwd`
        else
            echo "${1}: command not found"
        fi
    fi
}
Run Code Online (Sandbox Code Playgroud)

尽管它似乎在工作(该echo pwd命令打印了预期的目录),但实际 shell 中的目录并没有改变。

我的印象是,因为这是我.bashrc的 shell 中的一个函数,所以我不会分叉,我可以这样做,cd但显然这不起作用。任何有关如何解决此问题的提示将不胜感激。

gee*_*aur 3

认为发生的情况是 shellfork()在设置任何重定向之后但在查找命令之前,因此command_not_found_handle不会影响交互式 shell 进程。