Cách gọi một tập lệnh sau mỗi lệnh bash


22

Có thể gọi một tập lệnh trong ví dụ này được đặt tên hey.shtheo mỗi lệnh bash không?

Ví dụ: bạn gõ lsnhấn enter và ls chạy, sau đó hey.shsẽ chạy.

Sau đó, bạn gõ cd .. (hoặc bất kỳ lệnh nào khác) , cd chạy rồi hey.shsẽ chạy, v.v.


2
Đây là một vấn đề XY hoặc một ý tưởng rất kỳ quặc; bạn đang cố gắng để đạt được điều gì?
jasonwryan

bí danh trong bash.rc có thể?
moonbutt74

Câu trả lời:


29
PROMPT_COMMAND+="hey.sh;"

PROMPT_COMMAND Nếu được đặt, giá trị được thực thi dưới dạng lệnh trước khi phát hành từng dấu nhắc chính.


Lưu ý: Biến môi trường so với biến shell

Theo mặc định, PROMPT_COMMANDkhông một biến môi trường . Nó chỉ là một biến vỏ .

Cả hai loại biến được truy cập theo cùng một cách ( "$variable*"), nhưng các biến môi trường được kế thừa bởi các tiến trình con trong khi các biến shell không có.

Quy ước là viết hoa các biến môi trường + biến shell cấu hình shell của bạn (PROMPT_COMMAND không cấu hình shell của bạn), nhưng giữ các loại biến khác trong trường hợp thấp hơn.

Trong bash , bạn có thể làm: declare -pđể tìm hiểu xem một biến có được xuất không (= là biến môi trường) hay không:

$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable

2
@ John Không. Đừng export. Chỉ cần đặt nó (hoặc nối thêm vào nó, ví dụ, như được hiển thị ở trên).
PSkocik

Neat, những gì về sau mặc dù?
moonbutt74

2
@ moonbutt74 trước mỗi lệnh == sau mỗi lệnh + khi bắt đầu phiên bash của bạn
PSkocik

@PSkocik Tôi đã nhận được Tôi chỉ tò mò nếu đó đã là một biến môi trường, theo lệnh echo nhanh, tôi phát hiện ra nó là. Điều này thực hiện chính xác những gì tôi đang tìm kiếm
John

@ John Theo mặc định, nó chỉ là biến shell chứ không phải biến môi trường.
PSkocik
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.