Bash

強制為每個命令“添加”別名

  • August 30, 2020

是否可以在 中的每個命令中強制添加時序別名(因為缺乏更好的表達方式)bash

例如,我希望有一個特定使用者,無論何時執行命令,它總是用datebefore 和 after 或time.

這可能嗎?如果可以,怎麼做?

您可以記錄啟動命令行的時間和顯示提示的時間。Bash 已經在其歷史記錄中記錄了每個命令行的開始日期,並且您可以記下顯示下一個提示符的時間。

print_command_wall_clock_time () {
 echo Wall clock time: \
   $(($(date +%s) - $(HISTTIMEFORMAT="%s ";
                      set -o noglob;
                      set $(history 1); echo $2)))
}
PROMPT_COMMAND=print_command_wall_clock_time$'\n'"$PROMPT_COMMAND"

這只會給你第二個解析度,只有掛鐘時間。如果你想要更好的解析度,你需要使用支持納秒格式的外部date命令,並在執行命令之前呼叫trap來計時。%N``DEBUG``date

call_date_before_command () {
 date_before=$(date +%s.%N)
}
print_wall_clock_time () {
 echo "Wall clock time: $(date +"%s.%N - $date_before" | bc)"
}
trap call_date_before_command DEBUG
PROMPT_COMMAND=print_wall_clock_time

即使有DEBUG陷阱,我也不認為有一種方法可以自動顯示每個命令的處理器時間,或者比提示提示更具辨別力。


如果您願意使用不同的 shell,以下是如何為 zsh 中的每個命令獲取時間報告(這並不適用於其他任務):

REPORTTIME=0

您可以設置REPORTTIME為任何整數值,時間資訊只會顯示在處理器時間超過這麼多秒的命令中。

Zsh 從呼叫變數的 csh 中獲取了此功能time

引用自:https://unix.stackexchange.com/questions/12059