我喜欢在windows 10上将cygwin-bash与GNU Emacs的FSF端口(不要与GNU Emacs的cygwin端口混淆(一起使用。emacs将shell文件名定义为cygwin-bash。当我将emacs compile命令或emacs asynch shell命令与PATH环境变量中的可执行文件一起使用时,没有问题。
然而,当我将我自己开发的sql-client.pl脚本与compile命令一起使用时
$USERPROFILE/Documents/bin/sql-client.pl
运行良好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 groovy
或chmod 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运行程序。