EDYTOWAĆ
TL; DR : utwórz skrót do autouzupełniania .inputrc
i uruchom w .bashrc
. Uruchom polecenie jak zwykle, wpisz, ale zamiast tego ENTERnaciśnij skrót określony w.inputrc
Osoba, która naliczyła nagrodę za to pytanie, powiedziała:
„Wszystkie istniejące odpowiedzi wymagają wpisania dodatkowego polecenia po poleceniu. Chcę odpowiedzi, która zrobi to automatycznie”.
Badając rozwiązania tego problemu, natknąłem się na to pytanie z stackexchange, które pozwala na powiązanie CtrlJz sekwencją poleceń: Ctrla(przejście do początku linii), umieść ciąg „mesure” przed wprowadzonym poleceniem, Ctrlm(wykonaj)
W ten sposób otrzymujesz funkcję automatycznego uzupełniania i osobne ENTERpolecenie do pomiaru czasu, zachowując oryginalny cel drugiej funkcji, którą zamieściłem poniżej.
Na razie oto zawartość mojego ~/.inputrc
pliku:
"\C-j": "\C-a measure \C-m"
A oto zawartość .bashrc
(uwaga, nie używałem bash od zawsze - używam mksh jako mojej powłoki, stąd to widać w oryginalnym poście. Funkcjonalność jest nadal taka sama)
PS1=' serg@ubuntu [$(pwd)]
================================
$ '
function measure ()
{
/usr/bin/time --output="/home/xieerqi/.timefile" -f "%e" $@
if [ $( cat ~/.timefile| cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Oryginalny post
Oto mój pomysł - użyj funkcji w .bashrc
. Podstawowa zasada - służy /usr/bin/time
do pomiaru czasu potrzebnego do wykonania polecenia, a jeśli jest on dłuższy niż 15 sekund, wyślij powiadomienie.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Tutaj przekierowuję dane wyjściowe do, /dev/null
ale aby wyświetlić dane wyjściowe, można również dokonać przekierowania do pliku.
O wiele lepszym podejściem, IMHO, jest wysyłanie wyniku czasu do jakiegoś pliku w folderze domowym (tylko po to, abyś nie zanieczyszczał systemu plikami czasowymi i zawsze wiedział, gdzie szukać). Oto druga wersja
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
A oto zrzuty ekranu pierwszej i drugiej wersji, w tej kolejności
Pierwsza wersja, brak danych wyjściowych
Druga wersja z wyjściem