【发布时间】:2021-03-16 22:03:05
【问题描述】:
我喜欢在 Windows 10 上将 cygwin bash 与 GNU Emacs 的 FSF 端口(不要与 GNU Emacs 的 cygwin 端口混淆)一起使用。我的 .emacs 将 shell-file-name 定义为 cygwin bash。当我使用 emacs compile 命令或 emacs asynch shell 命令与我的 PATH 环境变量中的可执行文件时,没有问题。
但是,当我使用我自己开发的 sql-client.pl 脚本和编译命令时,
-
$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 不会执行它。
使用 cygwin chmod u+x groovy 或 chmod u+x sql-client.pl 命令没有帮助。
但如果我使用 groovy.bat 而不是 groovy 并且不指定路径,它会起作用!
或者,如果我使用控制台 bash 提示符,一切正常。
这是 emacs 或 cywgin bash 中的错误吗?一种解决方法是始终为我的脚本指定一个路径,但这可能很麻烦......有没有人有另一个更好的解决方法?
谢谢
齐格飞
【问题讨论】: