web-dev-qa-db-fra.com

Comment faites-vous que votre terminal joue un son ou offre une notification quand il a fini d'exécuter sa commande?

Je fais Sudo apt-get update de temps en temps, et je trouve frustrant de devoir vérifier quand cela est fait. Est-ce que je peux quand même le faire offrir une notification contextuelle ou émettre un son une fois l'exécution terminée, afin que je puisse continuer mon travail?

9
Akiva

J'ai écrit un peu de scripts pour le faire. Le script est situé dans github .

Voici le guide d'installation:

Installation

Télécharger ou simplement cloner le repo

 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git

Ajoutez ensuite l’approvisionnement en script postexec_notify à votre .bashrc.

Voici git clone exemple d'installation:

 $ cd ~
 $ git clone [email protected]:c0rp-aubakirov/notify_after_command_executed.git
 $ cd ~/notify_after_command_executed
 $ echo "source $(pwd)/postexec_notify" >> ~/.bashrc

Maintenant, redémarrez votre terminal. Après le redémarrage, vous devriez voir ces messages:

preexec.sh is not exist
Trying to download it from github

Maintenant, essayez de tester si la notification apparaît:

$ sleep 6

S'il vous plaît laissez-moi savoir si quelque chose n'est pas clair ou si vous avez des problèmes.

2
c0rp

Sound je ne peux pas vous aider avec. Cependant, si vous ajoutez quelque chose comme

  && notify-send "Task complete."

après votre commande, une notification devrait apparaître dans le coin supérieur droit. Si le paquet requis n'est pas installé par défaut, Sudo apt-get install libnotify-bin devrait l'obtenir pour vous. Le && exécutera une deuxième commande si la première se termine avec succès.

16
Marc

Ce que vous voulez, c'est Sudo apt-get update; alert. Ce qui suit est une explication et une justification.


  • À partir du terminal, vous pouvez répertorier de nombreuses commandes à exécuter en séquence. Donc, ce que vous voulez, c'est d'abord la commande qui prend beaucoup de temps, et ensuite une commande de notification.
  • Pour exécuter les commandes en séquence, séparez-les avec && ou ;. Celles-ci ont deux significations distinctes: command-a && command-b signifie que commande-a sera exécutée en premier, puis, si l'opération réussit, commande-b sera exécutée; command-a; command-b signifie que commande-a sera exécutée en premier, puis commande-b sera exécutée, que la commande-a ait abouti ou non. Vous voulez probablement le point-virgule: vous voulez être averti lorsque la mise à jour ou la mise à niveau s'est arrêtée, qu'elle se soit terminée ou non avec succès.
  • D'autres répondeurs vous ont suggéré des alertes audio et à l'écran. Ma préférence va à notify-send, qui prend deux paramètres: un titre et un contenu: Sudo apt-get update; notify-send update finished (si l'un des paramètres contient des espaces, mettez-les entre guillemets).
  • Beaucoup plus rapide et facile à taper que notify-send title content est alert. Cet alias est intégré par défaut à bash dans au moins certaines versions d’Ubuntu. Il est assez facile de l’ajouter s’il manque au vôtre (utilisez type alert pour vérifier s’il est présent). Vous devriez obtenir la réponse,

    alert is aliased to `notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//')"'
    

    Cela signifie qu'il va simplement extraire la dernière commande et l'envoyer à notify-send, et que l'icône qui l'accompagne sera une image d'un terminal (pour une commande réussie) ou une image d'erreur (pour une commande ayant échoué).

    La vie est maintenant devenue encore plus simple: command; alert est très rapide et facile à saisir. Il alertera si la commande a réussi ou non, et l'alerte contiendra une indication indiquant si la commande a réussi ou non.

Incidemment, il m'est parfois agacé de ne pas pouvoir diriger la sortie vers notify-send, alors j'ai écrit une petite fonction pour le faire pour moi:

notify () 
{ 
    while read input; do
        notify-send -i $(ls /usr/share/icons/gnome/32x32/emotes | sed 's/\(.*\)\..*/\1/' | shuf -n1) "message" "$input";
    done
}

Cela me permet de taper command | notify. L'icône dans ce cas est aléatoire, cependant. En outre, vous recevez une notification pour chaque ligne de sortie, ce qui n'est probablement pas un bon choix pour apt-get update.

8
TRiG

Pour les fichiers compatibles aplay

Pour jouer un son personnalisé via les haut-parleurs, vous pouvez exécuter

aplay <path_to_sound_file>

* <path_to_sound_file> = chemin du fichier son

jouer le fichier son choisi; alors vous pouvez ajouter un alias playsound à ~/.bashrc:

alias playsound='aplay <path_to_sound_file>'

* <path_to_sound_file> = chemin du fichier son

De cette façon, vous pouvez exécuter Sudo apt-get update && playsound pour reproduire le son choisi lorsque Sudo apt-get update est terminé.

Pour les fichiers non compatibles avec aplay (fichiers .ogg, par exemple) (sons du système)

Pour jouer un son personnalisé via les haut-parleurs, vous pouvez exécuter

pacmd list-sinks | grep -E 'index|device.product.name'

pour lister tous les index des éviers disponibles de pulseaudio avec le dispositif correspondant; alors vous pouvez courir

pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null

* <sink_index> = _ l'index de l'évier de pulseaudio

pour jouer /usr/share/sounds/ubuntu/stereo/bell.ogg à travers l'évier choisi. (Bien sûr, vous pouvez jouer le son que vous voulez); alors vous pouvez ajouter un alias playsound à ~/.bashrc:

alias playsound='pacmd play-file /usr/share/sounds/ubuntu/stereo/bell.ogg <sink_index> > /dev/null'

* <sink_index> = _ l'index de l'évier de pulseaudio

De cette façon, vous pouvez exécuter Sudo apt-get update && playsound pour reproduire le son choisi lorsque Sudo apt-get update est terminé.

3
kos

Vous pouvez ajouter quelque chose comme

&& echo -e "\007"

au bout de votre ligne. Essayer de faire

Sudo apt-get update && Sudo apt-get -y upgrade && echo -e "\007"

J'espère que ça t'as aidé

1
Terrance