shell 函数 cd 中断 $PATH

shell fucntion cd breaks $PATH

我正在尝试使用脚本更改工作目录。

在 .zshrc 中:

source myscript

在我的脚本中:

fucntion cdd(){
    $path=(find xxx |fzf) #just a command to get a path
    cd $path
}
zle -N cdd
bindkey '\et' cdd #Alt+t

我想做类似fzf的事情。

在我按下alt+t后,我确实改变了工作目录,但似乎我的环境坏了。(我需要 Enter 才能获得 shell 回升)

              (<---note I need to press Enter to get shell promote)
➜  c vim
zsh: command not found: vim
➜  c ls
zsh: command not found: ls
➜  c pwd
/home/xxx/document/c
➜  c echo $PATH
./document/c
➜  c

最后一个命令 pwd 运行良好。奇怪的是我的 $PATH 改变了。我不明白为什么。

$path=(find xxx |fzf) 是错误的。你想要:

mypath=$(find ...)

即省略前导$。一般来说,path 是一个不好的变量名,所以我使用 mypathPATH 在所有 shell 中都有特殊含义,而 pathzsh 中很重要。特别地,path 是一个数组变量,由要搜索可执行文件的目录组成。 pathPATH 是绑定的(请参阅 zsh 文档中的 typedef -T),因此修改 path 会有效地更改 PATH.