Erro "não é possível definir o grupo de processos do terminal" ao executar o script bash

13

Eu tenho as seguintes duas linhas de código no meu arquivo init.el:

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

Tentei executar o script a seguir para obter uma lista de executáveis ​​usando o script de shell dmenu_path.

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

Eu vejo o seguinte erro:

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

Como impedir que o bash retorne esse erro ao usar shell-command?

wdkrnls
fonte
Pergunta duplicado, possivelmente parcial de stackoverflow.com/questions/9670209/... parece haver nenhuma solução ainda se o seu escudo é do Cygwin bash
julio

Respostas:

10

O -isinalizador solicita que o Bash seja executado no modo interativo, o que requer um terminal. A solução é deixar a shell-command-switchvariável em seu valor padrão, o que é justo -c.

Se você realmente precisar executar o Bash no modo interativo, precisará executá-lo em um pseudo-terminal, usando start-file-processcom process-connection-typebound to t.

jch
fonte
Isso não funcionou para mim.
Didier A.
Funciona para mim. Como exemplo, este comando inicia gnome-terminal, executa echoe deixa a sessão do Bash em execução e pronta para receber novos comandos (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"):; qualquer saída do comando Elisp é enviada para o *Messages*buffer. Observe que eu usei em start-file-process-shell-commandvez de start-file-process, então não preciso dar o caminho para os programas shell.
Arch Stanton
0

Você adicionou -ipara obter o bash para expandir aliases? Nesse caso, conforme fornecido em /programming/12224909 , inclua

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

no seu .emacs e

shopt -s expand_aliases

no seu .bashrc. O primeiro faz com que seu .bashrc seja executado em seus sub-shells, e o último permite a expansão de alias em shells bash sem logon.

Você pode melhorar ainda mais, criando um script de shell separado com seus aliases e a linha shopt e usando-o como o valor BASH_ENV; que pode correr mais rápido que o seu ~ / .bashrc completo.

Ethan Bradford
fonte
Você pode resumir a correção detalhada lá? Caso contrário, essa é essencialmente uma resposta apenas para link e, portanto, corre o risco de ser excluída.
Drew