У меня есть следующие две строки кода в моем файле 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
?
shell-command
bash
wdkrnls
источник
источник
Ответы:
Эти
-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
, поэтому мне не нужно указывать путь к программам оболочки.Вы добавили,
-i
чтобы получить bash для расширения псевдонимов? Если это так, как указано в /programming/12224909 , вместо этого включитев ваших .emacs и
в вашем .bashrc. В первом случае ваш .bashrc запускается на ваших вложенных оболочках, а второй допускает расширение псевдонимов в оболочках bash без входа в систему.
Вы можете сделать это лучше, создав отдельный сценарий оболочки с вашими псевдонимами и строкой покупок и используя его в качестве значения BASH_ENV; это может работать быстрее чем ваш полный ~ / .bashrc.
источник