Không thể thiết lập nhóm quy trình thiết bị đầu cuối Lỗi khi chạy tập lệnh bash


13

Tôi có hai dòng mã sau trong tệp init.el của mình:

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

Tôi đã thử thực thi đoạn script sau để có danh sách các tệp thực thi bằng cách sử dụng tập lệnh shell dmenu_path.

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

Tôi thấy lỗi sau:

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

Làm cách nào tôi có thể ngăn bash trả lại lỗi đó khi sử dụng shell-command?


Có thể câu hỏi trùng lặp một phần của stackoverflow.com/questions/9670209/ dường như chưa có giải pháp nào nếu vỏ của bạn là bash của cygwin
julio

Câu trả lời:


10

Các -iyêu cầu cờ mà Bash chạy trong chế độ tương tác, đòi hỏi một thiết bị đầu cuối. Giải pháp là để lại shell-command-switchbiến ở giá trị mặc định của nó, đó là chỉ -c.

Nếu bạn thực sự cần chạy Bash trong chế độ tương tác, bạn sẽ cần chạy nó trong một thiết bị đầu cuối giả, bằng cách sử dụng start-file-processvới process-connection-typeràng buộc t.


Điều này đã không làm việc cho tôi.
Didier A.

Nó làm việc cho tôi. Ví dụ, lệnh này khởi chạy gnome-terminal, chạy echovà để phiên Bash chạy và sẵn sàng nhận các lệnh mới : (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"); bất kỳ đầu ra nào từ lệnh Elisp được gửi đến *Messages*bộ đệm. Lưu ý rằng tôi đã sử dụng start-file-process-shell-commandthay vì start-file-process, vì vậy tôi không cần đưa ra đường dẫn đến các chương trình shell.
Arch Stanton

0

Bạn đã thêm -iđể có được bash để mở rộng bí danh? Nếu vậy, như được đưa ra trong /programming/12224909 , thay vào đó bao gồm

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

trong .emacs của bạn và

shopt -s expand_aliases

trong .bashrc của bạn. Cái trước làm cho .bashrc của bạn được chạy trên các shell con của bạn và cái sau cho phép mở rộng bí danh trong các shell bash không đăng nhập.

Bạn có thể làm tốt hơn bằng cách tạo một tập lệnh shell riêng với các bí danh và dòng shopt của mình và sử dụng tập lệnh đó làm giá trị BASH_ENV; có thể chạy nhanh hơn toàn bộ ~ / .bashrc của bạn.


Bạn có thể vui lòng tóm tắt các sửa chữa chi tiết ở đó? Mặt khác, đây thực chất là một câu trả lời chỉ liên kết và do đó rủi ro bị xóa.
vẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.