Помилка "не може встановити групу процесових терміналів" під час запуску bash script


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 під час використання shell-command?


Можливо, часткове повторне запитання stackoverflow.com/questions/9670209/… , здається, рішення поки що немає, якщо ваша оболонка - це баг цигуна
julio

Відповіді:


10

Ці -iзапити прапорів , які Баш працювати в інтерактивному режимі, який вимагає терміналу. Рішення полягає в тому, щоб залишити shell-command-switchзмінну за її типовим значенням, яке є справедливим -c.

При вам дійсно потрібно запустити Bash в інтерактивному режимі, вам потрібно буде запустити його в псевдо-термінал, за допомогою start-file-processз process-connection-typeнеминуче t.


Це не спрацювало для мене.
Дідьє А.

Це працює для мене. В якості прикладу, ця команда запускає 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

Ви додали, -iщоб отримати bash для розширення псевдонімів? Якщо так, як зазначено в /programming/12224909 , замість цього включіть

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

у ваших .emacs та

shopt -s expand_aliases

у вашому .bashrc. Перший спричиняє запуск вашого .bashrc на ваших під оболонках, а другий дозволяє розширювати псевдоніми в оболонках bash, що не входять.

Ви можете перейти до кращого, створивши окремий скрипт оболонки зі своїми псевдонімами та рядком shopt і використовуючи це як значення BASH_ENV; який може працювати швидше, ніж ваш повний ~ / .bashrc.


Чи можете ви підкажіть, будь ласка, детальний виправлення там В іншому випадку це по суті відповідь лише на посилання, і тому ризикує бути видаленим.
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.