Một lệnh trước mỗi lệnh bash


Câu trả lời:


37

Xin lỗi vì trả lời sai trước đây, tôi đã hiểu sai câu hỏi của bạn.

Để có thời gian được thêm vào trước mỗi lệnh bạn thực thi trên trình bao, bạn có thể làm một cái gì đó như thế này

bind 'RETURN: "\e[1~time \e[4~\n"'

Điều này sẽ rebind khóa trở lại. Bây giờ, mỗi khi bạn nhấn return thay vì viết một dòng mới, nó sẽ đi đến đầu dòng, nhập văn bản 'thời gian' và một khoảng trắng, đi đến cuối dòng và nhập dòng mới \ n từ đó tạo ra dòng mong muốn hiệu ứng.

Nếu bạn không muốn hy sinh Khóa Enter của mình, bạn có thể tạo Khóa nhập chuẩn 'giây' như F12 bằng cách ràng buộc lệnh như thế này

bind '"\e[24~": "\e[1~time \e[4~\n"'

Bây giờ thay vì thay thế phím trả về, bạn đã ràng buộc F12.

Nền tảng của tất cả những điều này là bash sử dụng đường dẫn GNU để đọc lệnh. Vì vậy, readline sẽ là điểm khởi đầu tốt cho thao tác lệnh tiếp theo, v.v.


1
+1 giải pháp tốt đẹp! tôi thích ý tưởng có một phím nhập điểm chuẩn tách biệt với khóa nhập thông thường.
quack quixote

đó là một ý tưởng thông minh. Làm thế nào bạn có thể khái quát nó để thực thi một chức năng do người dùng định nghĩa trước mỗi lệnh? Tôi không biết cách kết hợp mã bash và hàm readline trong cùng một ràng buộc.
Gilles 'SO- ngừng trở nên xấu xa'

Điều này sẽ không chạy trong Mac? Tôi đã chạy lệnh trong thiết bị đầu cuối và phím enter của tôi dường như không làm gì cả.
akki

6

Tôi nhận ra rằng điều này nằm ngoài phạm vi của câu hỏi này nhưng ...

Trong zsh(trong đó, theo hiểu biết của tôi là một siêu bash) nếu bạn đặt biến sau trong .zshrctệp của mình :

export REPORTTIME=5

Mỗi lệnh mất hơn 5 giây (tôi khá chắc chắn) sẽ hiển thị đầu ra của time. Tất cả các lệnh hoàn thành nhanh hơn không. Và trong những trường hợp đó, người ta không thực sự quan tâm, vì vậy thật tuyệt khi không làm mọi thứ rối tung lên. Ngoài ra còn có rất nhiều tính năng thú vị khác zshmà bạn có thể thích trong khi bạn ở đó.


Mẹo hay. Mặc dù zsh chắc chắn có một siêu bộ chức năng của bash , nhưng cú pháp của nó không phải là siêu bộ của cú pháp của bash , vì vậy nó không phải là một sự thay thế trong trò chơi thay thế.
Chris Johnsen

1

Bao gồm \ t trong chuỗi nhắc của bạn. Nó sẽ bao gồm thời gian trong lời nhắc của bạn tại điểm bạn đưa nó vào. Xem: http://www.ibm.com/developerworks/linux/l Library / l-tip-prompt /


Đó là thời điểm hiện tại tại thời điểm lời nhắc được tạo, không phải là thời gian cần thiết để thực hiện lệnh trước đó.
Tạm dừng cho đến khi có thông báo mới.

Thật; và sự khác biệt giữa thời gian hiện tại và thời gian hiện tại của dấu nhắc tiếp theo là thời gian chạy (trừ thời gian gõ, tất nhiên - dán là bạn của bạn ở đây). Không có sự đánh giá lại cần thiết.
JRobert

0

PS1 có vẻ như là cách tiêu chuẩn để làm một cái gì đó như thế này.


2
Nó sửa đổi màn hình, không phải lệnh thực thi.
dùng1686

@grawity Phải - nhưng nó sẽ giúp bạn có được chính xác những gì bạn muốn ... thời gian được chuẩn bị cho mỗi dòng.
Jason Sundram

3
Điều này hoàn toàn khác với những gì timenó làm (nó đo lường mất bao lâu để một lệnh thực thi).
dùng1686

@grawity, tôi đoán bạn đúng - bạn phải tự mình thực hiện phép trừ. Có vẻ như @Jrobert cũng có ý tưởng tương tự.
Jason Sundram
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.