簡體   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