すべてのコマンドに対してエイリアスを強制的に「追加」します。

すべてのコマンドに対してエイリアスを強制的に「追加」します。

より良い表現方法がないので、すべてのコマンドにタイミングエイリアスを強制的に追加できますかbash

たとえば、特定のユーザーがいてコマンドが実行されるたびに、常にdatebefore と after または で実行されますtime

可能ですか?可能であればどのように達成できますか?

ベストアンサー1

コマンドラインの起動時とプロンプトが表示されたときに記録できます。 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"

これは2番目の解決策と壁時計時間のみを提供します。より良い解像度が必要な場合は、ナノ秒形式をサポートdateする外部コマンド%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各コマンドのプロセッサ時間を自動的に表示したり、プロンプトよりも識別する方法はないと思います。


別のシェルを使用する場合は、zshで各コマンドの時間レポートを取得する方法は次のとおりです(他の操作では機能しません)。

REPORTTIME=0

この値は任意の整数値に設定できREPORTTIME、プロセッサ時間をこの秒以上使用する命令のみがタイミング情報を表示します。

Zshは、変数が呼び出されるcshからこの機能を継承しますtime

おすすめ記事