Làm thế nào tôi có thể tự động thời gian lệnh trong bash?


14

Trong tcshđó, có biến time:

   The time shell variable can be set to execute the time builtin command
   after the completion of any process that takes more than a given number
   of CPU seconds.

Làm thế nào để tôi làm điều này trong bash?

Câu trả lời:


14

Tôi không nghĩ rằng bạn có thể đạt được chính xác hiệu ứng tương tự mà không cần sửa đổi nguồn bash. Nhưng bạn có thể đến gần, hy vọng đủ gần với bạn.

Bạn có thể kết hợp hook preommand hacky của bashSECONDSbiến để hiển thị thời gian đồng hồ treo tường theo cách không xâm phạm. Đây là một triển khai đơn giản do Ville Laurikari . Các chức năng timer_starttimer_stopđược thực hiện ngay trước khi bắt đầu một lệnh và ngay lập tức trước khi hiển thị lời nhắc tiếp theo.

function timer_start {
  timer=${timer:-$SECONDS}
}
function timer_stop {
  timer_show=$(($SECONDS - $timer))
  unset timer
}
trap 'timer_start' DEBUG
PROMPT_COMMAND=timer_stop
PS1='[last: ${timer_show}s][\w]$ '

Để có được timethông tin đầy đủ cho mỗi lệnh, đây là một cách do Dennis Williamson :

bind '"\C-j": "\C-atime {\C-e;}\C-m"'

Khi bạn nhấn Ctrl+ Jthay vì Enterbắt đầu một lệnh, bạn sẽ nhận được thông tin về thời gian. Rebinding Enter(tức là Ctrl+ M) không được khuyến nghị vì lệnh được sửa đổi đôi khi sẽ không chính xác về mặt cú pháp.

Xem Làm thế nào có thể đặt thời gian tường của lệnh cuối cùng trong dấu nhắc Bash? Tự động định thời gian cho mỗi lệnh đã thực hiện và hiển thị trong dấu nhắc Bash? trên Stack Overflow cho các phương thức khác (tuy nhiên lưu ý rằng hầu hết chỉ cung cấp thời gian thực đã trôi qua, không phải thời gian CPU).

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.