繁体   English   中英

Windows 的 GNU Emacs 仅忽略脚本的 PATH

[英]GNU Emacs for Windows ignores PATH for scripts only

I like to use cygwin bash with the FSF port of GNU Emacs (not to be confused with the cygwin port of GNU Emacs) on windows 10. My.emacs defines shell-file-name to be cygwin bash. 当我将 emacs 编译命令或 emacs asynch shell 命令与我的 PATH 环境变量中的可执行文件一起使用时,没有问题。

但是,当我使用带有编译命令的自制 sql-client.pl 脚本时,

  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 脚本)命令得到了类似的结果:如果我在编译命令中指定完整路径,它就可以工作。 如果我使用来自 elisp 的“调用过程”function,它可以工作。 但是,它不能(不)从没有路径的编译命令中执行它。 它找到了它,但是像 sql-client.pl 一样,cygwin bash 不会执行它。

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

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

或者,如果我使用控制台 bash 提示符,一切正常。

这是 emacs 或 cywgin bash 中的错误吗? 一种解决方法是始终为我的脚本指定路径,但这可能很麻烦......有没有人有另一个更好的解决方法?

谢谢

齐格弗里德

由于您没有使用 Emacs 的 Cygwin 端口,我不明白为什么 Emacs 应该调用 bash 除非您明确说明。 Assuming that you also have a Windows port of Perl installed (such as Active State Perl), I would call your script explicitly via perl -x sql-client.pl .

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM