EDIT
TL; DR : створити ярлик автоматичного завершення .inputrc
і функціонувати в .bashrc
. Запустіть команду, як зазвичай, введіть, але замість цього ENTERнатисніть ярлик, який ви вказали.inputrc
Людина, яка розмістила щедрість за це питання, сказала:
"Усі існуючі відповіді вимагають ввести додаткову команду після команди. Я хочу відповідь, яка робить це автоматично".
Під час дослідження рішень цієї проблеми я натрапив на це запитання від stackexchange, що дозволяє прив’язати CtrlJдо послідовності команд: Ctrla(перехід до початку рядка), розмістіть рядок "mesure" перед командою, яку ви ввели, Ctrlm(виконайте)
Таким чином, ви отримуєте функцію автоматичного завершення та окрему ENTERкоманду для вимірювання часу, дотримуючись початкового призначення другої функції, яку я розмістив нижче.
На сьогодні тут вміст мого ~/.inputrc
файлу:
"\C-j": "\C-a measure \C-m"
І ось вміст .bashrc
(зауважте, я не використовую bash назавжди - я використовую mksh як свою оболонку, отже, це ви бачите в оригінальній публікації. Функціональність все одно однакова)
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
}
Оригінальна публікація
Ось моя ідея - використовувати функцію в .bashrc
. Основний принцип - використовуйте /usr/bin/time
для вимірювання часу, необхідного для виконання команди, і, якщо це більше 15 секунд, надішліть повідомлення.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Тут я переадресовую вихід, /dev/null
але щоб переглянути вихід, також можна зробити переадресацію до файлу.
Набагато кращим підходом, IMHO, є надсилання часу на якийсь файл у вашій домашній папці (тільки щоб ви не забруднювали систему тимчасовими файлами та завжди знали, де шукати). Ось ця друга версія
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
А ось скріншоти першої та другої версій, в такому порядку
Перша версія, без вихідних даних
Друга версія, з виходом