bash 스크립트를 실행할 때 "터미널 프로세스 그룹을 설정할 수 없습니다"오류


13

내 init.el 파일에 다음 두 줄의 코드가 있습니다.

(setq shell-file-name "bash")
(setq shell-command-switch "-ic")

쉘 스크립트 dmenu_path를 사용하여 실행 파일 목록을 얻기 위해 다음 스크립트를 실행하려고했습니다.

(defun dmenu-path-out ()
  (shell-command-to-string "dmenu_path"))

다음과 같은 오류가 나타납니다.

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
[
0ad
...

bash를 사용할 때 bash가 해당 오류를 반환하지 못하게하려면 어떻게 shell-command해야합니까?


아마도 stackoverflow.com/questions/9670209/에 대한 부분 복제 문제 일 것입니다… 쉘이 cygwin의 bash 인 경우 아직 해결책이없는 것 같습니다
julio

답변:


10

-i플래그 요청 배쉬는 터미널을 필요로 대화 형 모드에서 실행하는 것이. 해결책은 shell-command-switch변수를 기본값으로 유지하는 것입니다 -c.

대화식 모드에서 Bash를 실제로 실행해야하는 경우 start-file-processwith with process-connection-typeto를 사용하여 의사 터미널에서 Bash를 실행해야 합니다 t.


이것은 나를 위해 작동하지 않았습니다.
Didier A.

그것은 나를 위해 작동합니다. 예를 들어,이 명령은을 시작 gnome-terminal하고 실행 echo하며 Bash 세션을 실행중인 상태로두고 새 명령을 수행 할 준비를합니다. (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"); Elisp 명령의 모든 출력은 *Messages*버퍼 로 전송됩니다 . start-file-process-shell-command대신을 사용 start-file-process했으므로 셸 프로그램에 대한 경로를 제공 할 필요가 없습니다.
아치 스탠튼

0

-ibash가 별칭을 확장하도록 추가 했습니까 ? 그렇다면 /programming/12224909에 제공된대로 대신 포함

(setenv "BASH_ENV" "~/.bashrc")

당신의 .emacs에서

shopt -s expand_aliases

.bashrc에. 전자는 .bashrc가 서브 쉘에서 실행되도록하고 후자는 비 로그인 bash 쉘에서 별명 확장을 허용합니다.

별명과 shopt 행으로 별도의 쉘 스크립트를 작성하고이를 BASH_ENV 값으로 사용하면 더 나아질 수 있습니다. ~ / .bashrc 전체보다 빠르게 실행될 수 있습니다.


거기에 자세한 수정 사항을 요약 해 주시겠습니까? 그렇지 않으면 이것은 본질적으로 링크 전용 답변이므로 삭제 될 위험이 있습니다.
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.