[英]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 腳本時,
$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 腳本)命令得到了類似的結果:如果我在編譯命令中指定完整路徑,它就可以工作。 如果我使用來自 elisp 的“調用過程”function,它可以工作。 但是,它不能(不)從沒有路徑的編譯命令中執行它。 它找到了它,但是像 sql-client.pl 一樣,cygwin bash 不會執行它。
使用 cygwin chmod u+x groovy
或chmod 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.