zsh配置mnotes函数 文件夹已存在时无法正常cd进入的问题
问题现象
在.zshrc配置文件中添加了mnotes函数,预期实现逻辑:若~/Desktop/Notes文件夹不存在则创建该文件夹,若文件夹已存在则执行cd命令进入该目录,原函数代码如下:
function mnotes(){ if [ ! -d ~/Desktop/Notes ];then mkdir ~/Desktop/Notes else cd ~/Desktop/Notes }
配置的别名如下:
alias notes=mnotes
执行source命令重载.zshrc配置后,输入notes命令,仅能在Notes文件夹不存在时正常创建文件夹,但当文件夹已存在时无法正常cd进入该目录。
文件夹存在时运行脚本的报错截图:
故障原因
- 核心语法错误:
if条件判断结构缺少闭合关键字fi,zsh解析函数时语法不完整,执行else分支逻辑时直接触发语法报错。 - 逻辑缺陷:原代码仅在文件夹已存在时才执行cd操作,首次创建文件夹后不会自动进入目录,不符合常规使用预期。
修复方法
将.zshrc中的mnotes函数替换为如下正确写法,替换后重新执行source ~/.zshrc重载配置即可正常使用:
function mnotes(){ # 判断目录是否存在,不存在则递归创建 if [ ! -d ~/Desktop/Notes ];then mkdir -p ~/Desktop/Notes fi # 无论新建还是已存在,最终都进入目标目录 cd ~/Desktop/Notes }
说明:
mkdir增加-p参数是为了避免上层目录(比如Desktop目录被误删)不存在时创建报错,兼容性更好。
内容的提问来源于stack exchange,提问作者Santhosh Pai
相关产品推荐
相关产品推荐

