Galat “tidak dapat mengatur grup proses terminal” saat menjalankan skrip bash

13

Saya memiliki dua baris kode berikut di file init.el saya:

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

Saya mencoba menjalankan skrip berikut untuk mendapatkan daftar executable menggunakan skrip shell dmenu_path.

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

Saya melihat kesalahan berikut:

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

Bagaimana saya bisa mencegah bash mengembalikan kesalahan itu saat menggunakan shell-command?

wdkrnls
sumber
Kemungkinan pertanyaan duplikat sebagian dari stackoverflow.com/questions/9670209/... sepertinya belum ada solusi jika shell Anda adalah bash cygwin
julio

Jawaban:

10

The -ipermintaan bendera yang Bash berjalan dalam modus interaktif, yang membutuhkan terminal. Solusinya adalah meninggalkan shell-command-switchvariabel pada nilai standarnya, yaitu adil -c.

Jika Anda benar-benar perlu menjalankan Bash dalam mode interaktif, Anda harus menjalankannya di pseudo-terminal, dengan menggunakan start-file-processdengan process-connection-typeterikat t.

jch
sumber
Ini tidak berhasil untuk saya.
Didier A.
Ini bekerja untuk saya. Sebagai contoh, perintah ini meluncurkan gnome-terminal, berjalan echodan daun sesi Bash berjalan dan siap untuk mengambil perintah baru: (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"); setiap output dari perintah Elisp dikirim ke *Messages*buffer. Perhatikan bahwa saya menggunakan start-file-process-shell-commandbukan start-file-process, jadi saya tidak perlu memberikan path ke program shell.
Arch Stanton
0

Apakah Anda menambahkan -iuntuk mendapatkan bash untuk memperluas alias? Jika demikian, seperti yang diberikan dalam /programming/12224909 , alih-alih sertakan

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

di .emacs Anda dan

shopt -s expand_aliases

di .bashrc Anda. Yang pertama menyebabkan .bashrc Anda dijalankan pada sub-shell Anda, dan yang terakhir memungkinkan ekspansi alias di shell bash non-login.

Anda dapat melakukannya dengan lebih baik dengan membuat skrip shell terpisah dengan alias dan baris shopt Anda, dan menggunakannya sebagai nilai BASH_ENV; yang mungkin berjalan lebih cepat daripada ~ ~ .bashrc penuh Anda.

Ethan Bradford
sumber
Bisakah Anda meringkas perbaikan yang terperinci di sana? Kalau tidak, ini pada dasarnya adalah jawaban hanya tautan dan karenanya berisiko dihapus.
Drew