Gibt es eine Möglichkeit, zsh nach REPORTTIME einen Befehl ausführen zu lassen?

7

Wenn ein Prozess länger als REPORTTIME dauert, gibt zsh die Zeit aus, zu der er abgeschlossen ist. Gibt es eine Möglichkeit, zusätzlich einen benutzerdefinierten Befehl auszuführen? (Ich möchte notify send verwenden, um mich über die Ausführung des Prozesses zu informieren.)

jck
quelle

Antworten:

5

Ich hatte nur den gleichen Gedanken. Habe eine schnelle Google und fand diese ; Ich habe es ein bisschen angepasst. Schieben Sie dies in Ihr zshrc:

if [[ -x `which notify-send` ]]; then
    notify-preexec-hook() {
        zsh_notifier_cmd="$1"
        zsh_notifier_time="`date +%s`"
    }

    notify-precmd-hook() {
        local time_taken

        if [[ "${zsh_notifier_cmd}" != "" ]]; then
            time_taken=$(( `date +%s` - ${zsh_notifier_time} ))
            if (( $time_taken > $REPORTTIME )); then
                notify-send "task finished" \
                    "'$zsh_notifier_cmd' exited after $time_taken seconds"
            fi
        fi
        zsh_notifier_cmd=
    }
fi

[[ -z $preexec_functions ]] && preexec_functions=()
preexec_functions=($preexec_functions notify-preexec-hook)

[[ -z $precmd_functions ]] && precmd_functions=()
precmd_functions=($precmd_functions notify-precmd-hook)

Ich bin ziemlich zufrieden damit! :) :)

hdgarrood
quelle
Willkommen bei Super User! Im Allgemeinen möchten wir, dass Antworten auf der Website für sich alleine stehen - Links sind großartig, aber wenn dieser Link jemals unterbrochen wird, sollte die Antwort genügend Informationen enthalten, um dennoch hilfreich zu sein. Bitte bearbeiten Sie Ihre Antwort, um weitere Details zu erhalten. Weitere Informationen finden Sie in den FAQ .
Slm
@slm - das macht sehr viel Sinn. bearbeitet
hdgarrood
1
Zu Ihreradd-zsh-hook
Information,