当前位置:  开发笔记 > 开发工具 > 正文

如何在Emacs中运行Cygwin Bash Shell?

如何解决《如何在Emacs中运行CygwinBashShell?》经验,为你挑选了4个好方法。

我正在Windows上运行GNU Emacs,因此输入:

M-x shell

启动Windows命令行DOS shell.但是,我希望能够从Emacs中运行Cygwin Bash Shell(或任何其他非Windows shell).如何轻松完成?



1> cjm..:

shell-file-name 是控制Emacs在运行shell命令时使用的shell的变量.

explicit-shell-file-name是控制哪个shell M-x shell启动的变量.

Ken的答案改变了你可能想要或不想要的那些.

您还可以通过临时更改来启动不同shell的函数explicit-shell-file-name:

(defun cygwin-shell ()
  "Run cygwin bash in shell mode."
  (interactive)
  (let ((explicit-shell-file-name "C:/cygwin/bin/bash"))
    (call-interactively 'shell)))

您可能还希望将--login参数传递给bash,因为您正在启动一个新的Cygwin会话.你可以通过设置来做到这一点explicit-bash-args.(注意,M-x shell使用explicit-PROGRAM -args,其中PROGRAM是shell路径名的文件名部分.这就是为什么你不应该包括.exe设置shell时的原因.


具体来说,你应该在某处添加(setq explicit-bash-args'(" - login"" - i")),否则,我收到消息"bash:ls:command not found"
你的e-lisp比我的好 - 我学到了足够的东西让它按照我想要的方式运行__以前,并且忘记了它的大部分意思.我认为我的代码最初是从某个地方的FAQ中复制出来的......

2> Chris Jones..:

我发现的最佳解决方案如下:

;; When running in Windows, we want to use an alternate shell so we
;; can be more unixy.
(setq shell-file-name "C:/MinGW/msys/1.0/bin/bash")
(setq explicit-shell-file-name shell-file-name)
(setenv "PATH"
    (concat ".:/usr/local/bin:/mingw/bin:/bin:"
        (replace-regexp-in-string " " "\\\\ "
            (replace-regexp-in-string "\\\\" "/"
                (replace-regexp-in-string "\\([A-Za-z]\\):" "/\\1"
                    (getenv "PATH"))))))

传递"--login"作为cjm 建议的问题是你的shell总是会在你的主目录中启动.但是,如果您正在编辑文件并且点击"Mx shell",那么您希望shell位于该文件的目录中.此外,我用"Mx grep"和"Mx compile"测试了这个设置.我怀疑这里的其他示例不适用于那些由于目录和PATH问题.

此elisp代码段属于〜/ .emacs文件.如果要使用Cygwin而不是MinGW,请将第一个字符串更改为C:/ cygwin/bin/bash.第二个字符串被添加到您的Windows PATH之前(在将该PATH转换为适当的unixy形式之后); 在Cygwin你可能想要"〜/ bin:/ usr/local/bin:/ usr/bin:"或类似的东西.



3> Ken Gentle..:

我将XEmacs与Cygwin一起使用,并且可以相对轻松地从XEmacs运行bash.

这是相关部分 init.el

;; Let's use CYGWIN bash...
;;
(setq binary-process-input t) 
(setq w32-quote-process-args ?\") 
(setq shell-file-name "bash") ;; or sh if you rename your bash executable to sh. 
(setenv "SHELL" shell-file-name) 
(setq explicit-shell-file-name shell-file-name) 
(setq explicit-sh-args '("-login" "-i"))



4> 小智..:

关于这个问题的一个更重要的暗示.

如果您使用Emacs shell模式并且有时需要bash和cmd,请将其设置为默认使用bash,因为您可以在bash中键入cmd并且生成的dos shell工作正常.

如果你设置Emacs使用cmd作为shell(这是NT emacs安装的方式),那么dos shell工作正常,但如果你键入bash或bash -i来运行bash shell,结果shell不能正常工作 - 见答案0.

但是如果bash是emacs调用的"第一个"shell,它的工作正常.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有