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?


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.


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.


Bisakah Anda meringkas perbaikan yang terperinci di sana? Kalau tidak, ini pada dasarnya adalah jawaban hanya tautan dan karenanya berisiko dihapus.
Drew
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.