Bash
強制為每個命令“添加”別名
是否可以在 中的每個命令中強制添加時序別名(因為缺乏更好的表達方式)
bash
?例如,我希望有一個特定使用者,無論何時執行命令,它總是用
date
before 和 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
。