EDITAR
TL;DR : créer un raccourci d'autocomplétion dans .inputrc
et la fonction dans .bashrc
. Exécutez la commande comme d'habitude, tapez dans, mais au lieu de ENTER appuyez sur le raccourci que vous avez spécifié dans .inputrc
La personne qui a mis la prime sur cette question a dit :
"Toutes les réponses existantes nécessitent de taper une commande supplémentaire après la commande. Je veux une réponse qui le fasse automatiquement."
En cherchant des solutions à ce problème, je suis tombé sur ce question de stackexchange, qui permet de lier CtrlJ à une séquence de commandes : Ctrla (déplacement au début de la ligne), placez la chaîne "mesure" devant la commande que vous avez entrée, Ctrlm (exécuter)
Ainsi, vous obtenez la fonctionnalité de l'auto-complétion et la séparation de la fonction ENTER pour mesurer le temps, tout en préservant l'objectif initial de la deuxième fonction que j'ai postée ci-dessous.
A partir de maintenant, voici le contenu de mon ~/.inputrc
fichier :
"\C-j": "\C-a measure \C-m"
Et voici le contenu de .bashrc
(note , je n'ai pas utilisé bash depuis une éternité - j'utilise mksh comme mon Shell , donc c'est ce que vous voyez dans le post original. La fonctionnalité est toujours la même)
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
}
Poste original
Voici mon idée : utiliser une fonction dans le fichier .bashrc
. Principe de base - utiliser /usr/bin/time
pour mesurer le temps nécessaire à l'exécution de la commande, et si ce temps est supérieur à 15 secondes, envoyer une notification.
function measure ()
{
if [ $( /usr/bin/time -f "%e" $@ 2>&1 >/dev/null ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Ici, je redirige la sortie vers /dev/null
mais pour visualiser la sortie, la redirection vers un fichier peut aussi être faite.
Une bien meilleure approche, à mon avis, est d'envoyer la sortie du temps dans un fichier quelconque de votre dossier personnel (pour ne pas polluer votre système avec des fichiers de temps, et pour savoir toujours où chercher). Voici cette deuxième version
function measure ()
{
/usr/bin/time --output=~/.timefile -f "%e" $@
if [ $( cat ~/.timefile | cut -d'.' -f1 ) -gt 15 ]; then
notify-send "Hi , $@ is done !"
fi
}
Et voici les captures d'écran de la première et de la deuxième version, dans cet ordre
Première version, pas de sortie
Deuxième version, avec sortie