РЕДАКТИРОВАТЬ
TL; DR : создать ярлык автозаполнения в .inputrc
и функцию в .bashrc
. Запустите команду как обычно, введите, но вместо ENTER, нажмите на ярлык, который вы указали в.inputrc
Человек, который назначил награду за этот вопрос, сказал:
«Все существующие ответы требуют ввода дополнительной команды после команды. Мне нужен ответ, который делает это автоматически».
При изучении решений этой проблемы я наткнулся на этот вопрос из stackexchange, который позволяет связать CtrlJпоследовательность команд: Ctrla(переместиться в начало строки), поместите строку «mesure» перед введенной вами командой Ctrlm(execute)
Таким образом, вы получаете функциональность автозаполнения и отдельную 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
но для просмотра вывода перенаправление в файл также может быть сделано.
ИМХО, гораздо лучший подход - отправлять вывод времени в какой-то файл в вашей домашней папке (просто чтобы вы не загрязняли вашу систему временными файлами и всегда знали, где искать). Вот эта вторая версия
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
А вот скриншоты первой и второй версии, в таком порядке
Первая версия, нет вывода
Вторая версия, с выходом