문제

저는 Windows에서 GNU Emacs를 실행하고 있으므로 다음을 입력합니다.

M-x shell

Windows 명령줄 DOS 셸을 시작합니다.그러나 대신 Emacs 내에서 Cygwin Bash Shell(또는 Windows가 아닌 다른 쉘)을 실행할 수 있기를 원합니다.이 일이 어떻게 쉽게 이루어질 수 있습니까?

도움이 되었습니까?

해결책

shell-file-name 쉘 명령을 실행하려고 할 때 Emacs가 사용하는 쉘을 제어하는 ​​변수입니다.

explicit-shell-file-name 어떤 쉘을 제어하는 ​​변수입니다 M-x 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 새로운 Cygwin 세션을 시작하기 때문에 bash에 대한 인수입니다.설정을 통해 그렇게 할 수 있습니다. explicit-bash-args.(참고하세요 M-x shell 용도 explicit-프로그램-args, 여기서 PROGRAM은 쉘 경로 이름의 파일 이름 부분입니다.이것이 바로 다음을 포함해서는 안 되는 이유입니다. .exe 쉘을 설정할 때.

다른 팁

내가 찾은 가장 좋은 솔루션은 다음과 같습니다.

;; 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"))))))

"-로그 인"통과 문제는 CJM입니다 제안 쉘은 항상 홈 디렉토리에서 시작됩니다. 그러나 파일을 편집하고 "MX Shell"을 누르면 해당 파일의 디렉토리에 쉘을 원합니다. 또한 "MX Grep"및 "MX Compile"으로이 설정을 테스트했습니다. 여기서 다른 예는 디렉토리 및 경로 문제로 인해 그와 함께 작동하지 않을 것이라고 의심합니다.

이 ELISP 스 니펫은 ~/.emacs 파일에 속합니다. mingw 대신 Cygwin을 사용하려면 첫 번째 문자열을 c :/cygwin/bin/bash로 변경하십시오. 두 번째 문자열은 Windows 경로로 선정됩니다 (해당 경로를 적절하게 Unixy 형식으로 변환 한 후). Cygwin에서는 아마도 "~/bin :/usr/local/bin :/usr/bin :"또는 유사한 것들을 원할 것입니다.

나는 cygwin과 함께 Xemacs를 사용하고 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"))

이 주제에 대한 더 중요한 힌트.

EMACS 쉘 모드를 사용하고 때때로 Bash와 CMD를 모두 원한다면 Bash에 CMD를 입력 할 수 있고 결과 DOS 쉘이 잘 작동하기 때문에 기본적으로 Bash를 사용하도록 설정하십시오.

CMD를 쉘 (NT EMACS 설치 방식)으로 사용하도록 EMAC를 설정하면 DOS 쉘이 잘 작동하지만 Bash 또는 Bash -I를 입력하면 Bash Shell을 실행하면 결과 쉘이 올바르게 작동하지 않습니다. 답변 0 참조.

그러나 Bash가 "첫 번째"쉘 emacs가 호출하는 경우 잘 작동합니다.

EMACS * 쉘 * 버퍼 내의 기본 Windows 명령 줄 쉘에서 직접 Bash를 실행할 수 있습니다.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\temp>bash
bash     

그러나 명령 프롬프트가 표시되지 않아 명령을 혼란스럽게 만들 수 있으며 출력 결과는 모두 함께 혼합됩니다.

또한, 알려지지 않은 이유로, 명령을 입력하고 반환을 누르면, 리턴 라인 문자 ( r)가 배쉬 오류를 일으키는 명령문의 끝에 추가됩니다.

ls
bash: line 1: $'ls\r': command not found

해결 방법은 모든 명령의 끝에 댓글 문자 (#)를 수동으로 추가하여 r 텍스트를 효과적으로 언급하는 것입니다.

ls #
myfile,txt
foo.bar
anotherfile.txt

이 전반적인 접근 방식은 이상적이지 않지만 Windows의 네이티브 쉘에서 Bash에 떨어 뜨려 빠른 작업을 수행 한 다음 Windows에서 계속 작업하기 위해 종료하려는 경우 유용 할 수 있습니다.

EMACSW32를 사용하고 있습니다. C-h a shell$ 쉘 시작 명령 목록과 명령 CMD-SHELL 및 CYGWIN-SHELL은 흥미로워 보입니다. 두 명령 모두 EMACSW32가 필요합니다. 메뉴에서도 발견됩니다. 도구> W & 32 쉘.

Cygwin-Shell을 처음으로 실행하고 EMAC에서 Cygwin 경로를 설정하지 않은 경우 찾기 버튼을 누르면 Cygwin 경로를 설정할 수있는 사용자 정의 페이지로 연결됩니다.

이 접근법이 나에게 효과가 없기 때문에 다음과 같은 방법을 얻었습니다.

(기본적으로 DOS 쉘을 열어주는 NTEMACS를 사용하고 있으므로 EMAC가 동일하게 동작 할 수 있습니다).

shell ( 'shell'not '$ shell')이라는 Windows 환경 변수를 만들고 cygwin 설치의 bash.exe로가는 경로를 제공합니다 (예 : c : programs cygwin bin bash.exe).

이제 MX 쉘을 수행하면 강타가 열립니다.

문안 인사,

이노

Bash에 대한 -로그 인 논증을 피하는 것에 대한 @chris Jones의 답변 외에도 다음 명령 줄 인수를 설정했습니다.

 (setq explicit-bash-args '("--noediting" "-i"))

-NOEDITING 옵션은 GNU READLINE 라이브러리와의 간섭을 방지하며 -i 옵션은 쉘이 대화식임을 지정합니다. 또한 EMACS 특정 배쉬 사용자 정의에 대해 내 홈 디렉토리의 .emacs_bash 파일을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top