shell-command
thực sự hoạt động trên cú pháp bash nhiều chuỗi. Vấn đề của tôi là shell-command
không biết biến môi trường bash, bao gồm PATH. Những gì tôi đã làm: thay thế tất cả "
bằng \"
trong tập lệnh và đặt nó vào một chuỗi dễ đọc, sau đó gán một số thư mục cho PATH. Đây là mã, thành công xuất ra tất cả các tệp thi hành trong hệ thống đến bộ đệm *Shell Command Output*
.
(let ((path "PATH='/usr/local/bin:/usr/bin:/bin'")
(command "IFS=: read -ra _dirs_in_path <<< \"$PATH\"
for _dir in \"${_dirs_in_path[@]}\"; do
for _file in \"${_dir}\"/*; do
[[ -x ${_file} && -f ${_file} ]] && printf '%s\n' \"${_file##*/}\"
done
done"))
(shell-command (concat path ";" command)))
Tôi vẫn quan tâm đến cách tạo compile
cũng hoạt động với tập lệnh bash nhiều chuỗi.
Lưu ý về PATH: Tôi không sử dụng (getenv "PATH")
trong dung dịch trên là vì, theo như tôi hiểu, các nhà quản lý X hiển thị (bao gồm xdm, gdm và kdm) do not run shell before Xsession, vì vậy một emacs chạy từ GUI sẽ có khác nhau biến môi trường từ các biến bash. Tôi chạy emacs --daemon
khi khởi động qua cron, đường dẫn của tôi được thiết lập trong /etc/profile
và ~/.profile
, vì vậy Emacs không nhận được PATH từ đó.
Steve Purcell đề xuất một số code (xem thêm biến thể one và two của nó trên SO) để đảm bảo Emacs có cùng biến môi trường, bao gồm PATH, làm vỏ.
Nguồn
2012-07-26 10:12:00
nếu Mx vùng vỏ lệnh-on-thất bại , vui lòng gửi báo cáo lỗi –