Tôi sử dụng Bash làm lớp vỏ tương tác của mình và tôi đã tự hỏi liệu có cách nào dễ dàng để Bash chạy một lệnh hệ thống thay vì lệnh dựng sẵn shell trong trường hợp cả hai đều có cùng tên.
Ví dụ: sử dụng hệ thống kill
(từ util-linux
) để in id quá trình (pid) của (các) tiến trình được đặt tên thay vì gửi tín hiệu:
$ /bin/kill -p httpd
2617
...
Không chỉ định đường dẫn đầy đủ của lệnh hệ thống, hàm dựng sẵn Bash được sử dụng thay cho lệnh hệ thống. Nội dung kill
không có -p
tùy chọn nên lệnh không thành công:
$ kill -p httpd
bash: kill: p: invalid signal specification
Tôi đã thử các câu trả lời được liệt kê trong Make bash sử dụng lệnh `time` bên ngoài thay vì shell tích hợp nhưng hầu hết chúng chỉ hoạt động vì time
thực sự là một từ khóa shell - không phải là shell dựng sẵn .
Khác với việc tạm thời vô hiệu hóa tích hợp Bash enable -n kill
, giải pháp tốt nhất tôi thấy cho đến nay là sử dụng:
$(which kill) -p httpd
Có cách nào khác dễ dàng hơn (liên quan đến việc gõ ít hơn) để thực thi lệnh bên ngoài thay vì shell dựng sẵn không?
Lưu ý rằng đó kill
chỉ là một ví dụ và tôi muốn một giải pháp tổng quát tương tự như cách tiền tố với command
nội dung ngăn chặn các hàm có cùng tên với một lệnh bên ngoài được chạy. Trong hầu hết các trường hợp, tôi thường thích sử dụng phiên bản dựng sẵn vì nó giúp tiết kiệm một quy trình mới và đôi khi nội dung đó có các tính năng mà lệnh bên ngoài không có.
$(…)
- xem cái này , cái này và cái này .
which kill
backticks (không thể đưa chúng vào bình luận) ngắn hơn một chút .