Sự cố là các mã thông báo như ~
, *
và |
không được xử lý/mở rộng bởi chương trình ls
. Vì mã thông báo không được xử lý, ls
tìm kiếm tệp hoặc thư mục có tên là ~/org
, một tệp hoặc thư mục được gọi là *.txt
và một tệp hoặc thư mục được gọi là | head -5
. Vì vậy, thông báo lỗi mà bạn nhận được về "Không có tệp hoặc thư mục như vậy".
Các mã thông báo này được xử lý/mở rộng bởi vỏ (như Bourne shell/bin/sh hoặc Bash/bin/bash). có thể là trình bao cụ thể, nhưng phần lớn trình bao giải thích ít nhất một số mã thông báo giống nhau theo cùng một cách, ví dụ: |
có nghĩa là kết nối các chương trình với nhau từ đầu đến cuối cho hầu hết tất cả các trình bao. không làm ~
dấu ngã/mở rộng thư mục nhà
Nếu bạn muốn mở rộng, bạn phải yêu cầu chương trình gọi để tự mở rộng giống như một trình bao (làm việc chăm chỉ) hoặc chạy lệnh ls
trong một shell (dễ dàng hơn nhiều):
/bin/bash -c "ls -t ~/org *.txt | head -5"
nên
(call-process "/bin/bash" nil t nil "-c" "ls -t ~/org *.txt | head -5")
Edit: làm rõ một số vấn đề, như đề cập rằng /bin/sh
không làm ~
mở rộng.
Nguồn
2011-02-01 04:57:00
Câu trả lời hoàn hảo. Cảm ơn! – eatloaf
@eatload - gald để có thể trợ giúp - 'shell-command' của R. P. Dillon có vẻ như là một lựa chọn tốt. –