ZSH 技巧:无需输入 ./ 就能运行当前目录下的程序

你是不是经常遇到在网上复制命令的时候粘贴到自己的机子上想要运行却提示command not found?

我也是,找了一大圈我终于找到了解决方案,只需要在zsh的配置文件中添加一个函数就好了

command_not_found_handler() {
  if [ -x "./$1" ]; then
    echo "执行本地程序: ./$1 ${@:2}"
    ./$1 "${@:2}"
    return 0
  else
    echo "zsh: command not found: $1"
    return 127
  fi
}

把这个粘贴到zsh配置文件中,然后source一下,再次运行就少掉了每次运行都要添加./的烦恼了。

效果如下


哦对了,我是保证在我运行的目录下面是有这么一个二进制文件存在的

20 个赞

可以,周一试试 :rofl:

3 个赞

感谢分享w

3 个赞

不错的小技巧,Mark待用,谢谢了

不用那么麻烦哦,

PATH="$PATH:./"

这条命令也能实现一样的效果。如果想要优先使用当前目录下的可执行程序,就写成

PATH="./:$PATH"

原理是,shell 在执行命令时会以冒号 : 为分隔符,在环境变量 $PATH 所指定的目录中依次寻找二进制程序。把当前目录 ./ 加入 $PATH 中,就可以指引 shell 在当前目录下搜寻命令了

10 个赞

牛掰 这样子也行

感谢分享,不错的小技巧

谢谢分享不错的技巧

感谢大佬分享!

那这句命令应该放到哪个文件里呢?

没记错应该在~/.zshrc

1 个赞

谢谢。在这之上一级还有么?就是不管换用哪个shell,都继续保持有效

这个我就不知道了,不同shell的默认配置文件应该不是同一个吧。
这里说/etc/profile也可以配置环境变量,不知道是不是你要的

1 个赞

看起来就是这里,有环境了验证下,感谢

哈哈我一般都用ctrl+a然后到开头加

不用谢,动动手的事:face_with_monocle:

太强了,大佬

ctrl+ a ctrl+c ctrl+v :joy:

很早之前搜索过这个问题,解决方案是加入PATH,不过说是有安全风险,更多的不记得了,可以问个ai获取细节

你这个好,够简单