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
?
shell-command
bash
wdkrnls
fonte
fonte
Respostas:
O
-i
sinalizador solicita que o Bash seja executado no modo interativo, o que requer um terminal. A solução é deixar ashell-command-switch
variá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-process
comprocess-connection-type
bound tot
.fonte
gnome-terminal
, executaecho
e 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 emstart-file-process-shell-command
vez destart-file-process
, então não preciso dar o caminho para os programas shell.Você adicionou
-i
para obter o bash para expandir aliases? Nesse caso, conforme fornecido em /programming/12224909 , incluano seu .emacs e
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.
fonte