ИЗМЕНИТЬ
TL; DR : создать ярлык автозаполнения в .inputrc
и функцию в .bashrc
. Запустите команду, как обычно, введите, но вместо ENTER нажмите сочетание клавиш, указанное в .inputrc
Человек, который разместил награду по этому вопросу, сказал:
«Все существующие ответы требуют ввода дополнительной команды
после команды. Я хочу получить ответ, который сделает это автоматически ».
При исследовании решений этой проблемы я наткнулся на этот вопрос из stackexchange, который позволяет привязывать Ctrl J к последовательности команд: Ctrl a (переход к началу строки), поместите строку «mesure» впереди команды, которую вы ввели, Ctrl m (выполнить)
Таким образом, вы получаете функциональность автозаполнения и отдельную команду ENTER для измерения времени, сохраняя первоначальную цель функции second , которую я написал ниже. Р>
На данный момент вот содержимое моего файла ~/.inputrc
:
"\C-j": "\C-a measure \C-m"
р>
И вот содержимое .bashrc
(обратите внимание, что я не использовал bash навсегда - я использую mksh как свою оболочку, следовательно, это то, что вы видите в исходном сообщении. Функциональность все та же) р>
PS1=' [email protected] [$(pwd)]
================================
$ '
function measure ()
{
/usr/bin/time --output="/home/xieerqi/.timefile" -f "%e" [email protected]
if [ $( cat ~/.timefile| cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , [email protected] is done !"
fi
}
Оригинальная публикация
Вот моя идея - используйте функцию в .bashrc
. Основной принцип - используйте /usr/bin/time
, чтобы измерить время, необходимое для завершения команды, и если оно более 15 секунд, отправьте уведомление. Р>
function measure ()
{
if [ $( /usr/bin/time -f "%e" [email protected] 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , [email protected] is done !"
fi
}
Здесь я перенаправляю вывод на /dev/null
, но для просмотра вывода также можно перенаправить файл. Р>
Намного лучше, IMHO, это отправить вывод времени в какой-нибудь файл в вашей домашней папке (просто чтобы вы не загрязняли свою систему таймифами и всегда знали, где искать). Вот вторая версия
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" [email protected]
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , [email protected] is done !"
fi
}
И вот скриншоты первой и второй версий, в этом порядке
Первая версия, без вывода
Вторая версия, с выходом