Ошибка «невозможно установить группу процессов терминала» при запуске 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 этой ошибки при использовании shell-command?

wdkrnls
источник
Возможно, частично повторяющийся вопрос stackoverflow.com/questions/9670209/… Похоже, что решения пока нет, если ваша оболочка - это cygwin bash
julio

Ответы:

10

Эти -iзапросы флагов , которые Баш работать в интерактивном режиме, который требует терминала. Решение состоит в том, чтобы оставить значение shell-command-switchпеременной по умолчанию, которое просто -c.

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

JCH
источник
Это не сработало для меня.
Дидье А.
Меня устраивает. В качестве примера, эта команда запускает 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 без входа в систему.

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

Итан Брэдфорд
источник
Не могли бы вы подвести итоги исправления, подробно там? В противном случае это, по сути, ответ только для ссылки, и поэтому существует риск его удаления.
Дрю