Chạy tập lệnh bash mỗi khi dòng lệnh được thực thi


9

Tôi là người dùng Ubuntu / Linux mới, tôi muốn đặt câu hỏi như tiêu đề của tôi ở trên.

Ví dụ, tôi có một tệp bash ./script, tôi muốn làm cho nó chạy tự động khi tôi gõ bất kỳ dòng lệnh nào. Khi tôi thực thi dòng lệnh pwdthì ./scriptsẽ được thực thi. Khi tôi gõ dòng lệnh tiếp theo ls -lathì nó ./scriptsẽ được thực hiện lại.


4
chúng tôi có thể hỏi: loại hành động nào bạn dự định thực hiện trên mỗi lệnh được gõ không? và nó chỉ nên dành cho những người gõ tương tác? hoặc cũng cho bất kỳ lệnh nào trong một kịch bản? và những gì về các lệnh gõ trên ssh? v.v ... Đây có thể là một biểu tượng XY
Olivier Dulac

Câu trả lời:


13

Bạn cần đặt PROMPT_COMMANDbiến. Từ man bash:

PROMPT_COMMAND
              If set, the value is executed as a command prior to
              issuing each primary prompt.

Ví dụ, điều này sẽ ghi ngày hiện tại vào /tmp/PCmỗi khi lệnh được thực thi:

 $ PROMPT_COMMAND="date > /tmp/PC"

1
Đúng, tôi hiểu rồi .. giải pháp khá tuyệt. (nâng cấp)
Ender Phan

1
Cái này sai. Lệnh echo $(date)sẽ được chạy tại thời điểm khai báo, vì vậy sẽ luôn hiển thị (lưu) cùng một lúc.
heemayl

@heemayl: tất nhiên là bạn đúng, tôi đã sửa nó
Arkadiusz Drabchot

@ lộcphan Nếu một trong những câu trả lời này giải quyết được vấn đề của bạn, vui lòng dành chút thời gian và chấp nhận nó bằng cách nhấp vào dấu kiểm bên trái. Điều đó sẽ đánh dấu câu hỏi là đã trả lời và là cách cảm ơn được thể hiện trên các trang web Stack Exchange.
terdon

@heemayl: Tại sao? ...
Arkadiusz Drabchot

11

Bạn đang tìm kiếm PROMPT_COMMANDbiến môi trường, giá trị của biến này sẽ được thực thi dưới dạng lệnh, sau khi mỗi lệnh được đưa ra trong terminal được thực thi, ngay trước khi hiển thị dấu nhắc tiếp theo.

Ví dụ: đặt nó là:

export PROMPT_COMMAND='/path/to/script'

Tạo kịch bản /path/to/script, thực thi đầu tiên.

Bây giờ kịch bản sẽ được chạy sau mỗi lệnh.

Chỉ cần lưu ý, nếu bạn không muốn biến được xuất, tức là biến nó thành biến shell thay vì môi trường, hãy thả export:

PROMPT_COMMAND='/path/to/script'

Từ man bash:

PROMPT_COMMAND 
If set, the value is executed as a command prior to issuing each primary prompt.

Tôi hiểu rồi, cảm ơn rất nhiều vì sự giúp đỡ của bạn :) (nâng cấp btw)
Ender Phan

Tại sao bạn đang sử dụng export?
Arkadiusz Drabchot

@ArkadiuszDrabchot exportsẽ biến biến PROMPT_COMMANDmôi trường thành biến môi trường, tức là biến sẽ có sẵn cho tất cả các tiến trình con (ví dụ: subshells) của shell hiện tại. Nếu bạn chỉ muốn giới hạn nó trong phiên shell hiện tại (biến shell), hãy xóa export.
heemayl

5
@heemayl: IMO exportkhông phải là một cách thực hành tốt ở đây - PROMPT_COMMANDchỉ nên được đặt trong tệp khởi động shell tương tác và không được hiển thị trong môi trường
Arkadiusz Drabchot
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.