运行bash脚本时出现“无法设置终端进程组”错误


13

我的init.el文件中包含以下两行代码:

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

我尝试执行以下脚本,以使用Shell脚本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/的部分重复问题。如果您的shell是cygwin的bash,似乎还没有解决方案
julio 18'Oct

Answers:


10

-i标志要求Bash以交互方式运行,这需要终端。解决方案是将shell-command-switch变量保留为默认值just -c

如果你真的需要在交互模式下运行的Bash,您将需要一个伪终端利用来运行它,start-file-processprocess-connection-type必然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,所以不需要给出shell程序的路径。
斯坦顿拱门,

0

您是否添加-i了bash来扩展别名?如果是这样,如 /programming/12224909中所述,则应包括

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

在您的.emacs中

shopt -s expand_aliases

在您的.bashrc中。前者使您的.bashrc在子外壳程序上运行,而后者允许在非登录bash外壳程序中扩展别名。

通过使用别名和shopt行创建一个单独的shell脚本,并将其用作BASH_ENV值,可以使性能更好。可能比完整的〜/ .bashrc运行得更快。


您能总结一下那里详细的修复程序吗?否则,这实质上是仅链接的答案,因此有被删除的风险。
提请
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.