GNU Emacs for Windows仅对脚本忽略PATH



我喜欢在windows 10上将cygwin-bash与GNU Emacs的FSF端口(不要与GNU Emacs的cygwin端口混淆(一起使用。emacs将shell文件名定义为cygwin-bash。当我将emacs compile命令或emacs asynch shell命令与PATH环境变量中的可执行文件一起使用时,没有问题。

然而,当我将我自己开发的sql-client.pl脚本与compile命令一起使用时

  1. $USERPROFILE/Documents/bin/sql-client.pl运行良好
  2. sql-client.pl(注意没有目录路径(会给我错误Can't open perl script "/cygdrive/c/Users/shein/Documents/bin/sql-client.pl": No such file or directory,即使bin目录在我的路径中。很明显,cygwin bash找到了它,但不会执行它

但是,在eval提示下,以下lisp代码运行良好:

(with-current-buffer (get-buffer-create "*scratch*") (call-process *bash* nil (current-buffer) nil "-c" "sql-client.pl"))

(请注意,它在PATH中查找sql-client.pl,而无需指定脚本的路径(。

groovy(一个bash脚本(命令也得到了类似的结果:如果我在compile命令中指定了完整的路径,它就可以工作了。如果我使用";呼叫过程";函数从elisp,它工作。但是,如果没有路径,它就不能(不(从编译命令执行它。它找到了它,但是和sql-client.pl一样,cygwin-bash不会执行它

使用cygwinchmod u+x groovychmod u+x sql-client.pl命令没有帮助。

但是,如果我使用groovy.bat而不是groovy,并且不指定路径,它就可以工作了!

或者,如果我使用控制台bash提示,一切都可以。

这是emacs还是cywgin bash中的bug?一种解决方法是始终为我的脚本指定一个路径,但这可能很麻烦。。。有人有其他更好的解决方法吗?

感谢

齐格弗里德

由于您没有使用Emacs的Cygwin端口,除非您明确表示,否则我不明白Emacs为什么要调用bash。假设您也安装了Perl的Windows端口(如Active State Perl(,我会通过perl -x sql-client.pl显式调用您的脚本。

还要注意的是,Cygwin模拟的可执行权限在Windows世界中没有太大意义,所以我想它们无论如何都无关紧要,除非你通过一些Cygwin shell运行程序。

最新更新