Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

samedi 18 mai 2019

Recevoir des notifications 'Desktop' depuis le Terminal

Quand on lance une commande qui prend du temps sous Linux, comme une compilation ou l'éxécution de tests unitaires, on est amené à aller voir périodiquement où c'en est, ce qui est un peu barbant et pas très efficace.

Il est pourtant possible d'envoyer des notifications à l'environnement graphique depuis la ligne de commande. On commnence par installer:

sudo apt-get install libnotify-bin

La commande à utiliser s'appele notify-send. Par exemple pour être notifié d'une erreur de compilation:

make || notify-send 'Compilation Failed' /home/user/sources/projects/my-project

Ce qui donne:

Notification Bureau

Le premier paramètre est le titre de la notification, ici 'Compilation Failed', le second correspond au texte qui s'affiche en dessous.

Comme il s'agit d'une erreur, on aurait dû utiliser:

make || notify-send -i error 'Compilation Failed' /home/user/sources/projects/my-project

Notification Erreur Bureau

Il est aussi possible d'afficher un message informatif, avec une ampoule comme icône, comme par exemple:

Notification Bureau (Info)

Ce qui correspond à la commande:

make || notify-send -i info 'Compilation Failed' /home/user/sources/projects/my-project

On peut également définir le temps d'affchage de la notification avec le flag -t:

make || notify-send -t 3000 -i error 'Compilation Failed' /home/user/sources/projects/my-project

Ainsi, la notification sera affichée 3 secondes à l'écran.

On voit donc qu'envoyer des notifications sur le bureau depuis la ligne de commande et vos scripts est très facile. La commande de notification pourra même être intégrée dans des alias Bash afin d'avoir une notification d'erreur chaque fois que la compilation ou les tests échouent.

dimanche 30 décembre 2018

Des vidéos de vos sessions de Terminal avec asciinema !

Quand on souhaite partager une technique ou une commande en faisant une vidéo, on a souvent recours à un logicel comme RecordMyDesktop ou Camtasia.

Ces logiciels demandent un peu de discipline comme par exemple sélectionner la fenêtre d'enregistrement, régler le volume du micro et ne pas se tromper dans le commentaire !

Mais quand il s'agit d'illustrer des commandes faites dans un terminal, il y a une méthode beaucoup plus légère et simple qui se nomme Asciinema, un projet initié par Marcin Kulik.

En effet, Asciinema permet d'enregistrer la session de votre terminal directement depuis celui-ci, tout en conservant les couleurs du terminal et les informations de "timing", et tout cela dans un fichier texte puisqu'une vidéo Asciinema est un fichier .json !

Une fois votre "vidéo" terminée, vous pourrez la rejouer, la partager mais aussi l'enregistrer et la publier sur le site d'Asciinema.

Installer Asciinema

Le plus simple pour disposer de la version la plus récente d'Asciinema est de l'installer avec Python:

sudo pip3 install asciinema
Downloading/unpacking asciinema
  Downloading asciinema-2.0.1.tar.gz
  Running setup.py (path:/tmp/pip-build-s4u_o9a3/asciinema/setup.py) egg_info for package asciinema
    
Installing collected packages: asciinema
  Running setup.py install for asciinema
    
    Installing asciinema script to /usr/local/bin
Successfully installed asciinema
Cleaning up...

On a alors:

which asciinema 
/usr/local/bin/asciinema

Et:

asciinema --version
asciinema 2.0.1

Enregistrer votre première vidéo avec Asciinema

Pour enregistrer notre première vidéo, on va entrer la commande suivante dans le terminal:

asciinema rec -t "My first asciinema video"

Cliquez sur le lien suivant pour une démo de l'utilisation d'Asciinema.

On peut voir que les commandes passées sont rejouées à la même vitesse et que les couleurs du terminal sont conservées.

Pendant que la vidéo se joue, vous pouvez sélectionner du texte avec la souris et ainsi utiliser le copier/coller !

Publier ou enregistrer la vidéo

Pour arrêter l'enregistrement, il faut utiliser <ctrl-d>, on a alors le choix entre publier la vidéo sur asciinema.org ou l'enregistrer en local:

pyfourmond@charlie-watts:/tmp/new_project (master)$ exit
asciinema: recording finished
asciinema: press <enter> to upload to asciinema.org, <ctrl-c> to save locally

View the recording at:

    https://asciinema.org/a/3CgRsy57JdioG0bCXHhDbLBnw

vendredi 16 février 2018

Quelques flags utiles des commandes 'cp' et 'mv'

Que ce soit dans un terminal ou dans un script Shell, on utilise tous quotidiennement les commandes cp et mv.

Mais connaissons tous vraiment les options de ces commandes ? Pas si sûr ... Ces options sont précieuses dans un script Shell pour comprendre le flow d'exécution ou pour débugger celui-ci.

Première option intéressante, l'option -v ou --verbose:

user@machine:~ cp --verbose cleanup.log /tmp/
« cleanup.log » -> « /tmp/cleanup.log »

qui permet d'afficher ce qui est effectué. Cette option existe aussi sur la commande mv.

Deuxième option, l'option --u ou --update permet de ne copier ou déplacer le fichier que si celui-ci est plus récent que la cible:

user@machine:~$ cp --verbose --update cleanup.log /tmp/
user@machine:~$ touch cleanup.log 
user@machine:~$ cp --verbose --update cleanup.log /tmp/
« cleanup.log » -> « /tmp/cleanup.log »

La première commande cp n'a rien fait puisque les fichiers étaient identiques.

cp et mv ont aussi une option qui permet d'archiver les fichiers cibles déjà existant avant de faire la copie ou le déplacement:

user@machine:~$ cp --verbose --backup=numbered cleanup.log /tmp/
« cleanup.log » -> « /tmp/cleanup.log » (archive : « /tmp/cleanup.log.~1~ »)
user@machine:~$ cp --verbose --backup=numbered cleanup.log /tmp/
« cleanup.log » -> « /tmp/cleanup.log » (archive : « /tmp/cleanup.log.~2~ »)

Cela permet de garder les versions précédentes si l'on a besoin de revenir en arrière.

L'option --backup peut prendre les valeurs suivantes:

  • none
  • numbered
  • existing
  • simple

Autre option intéressante pour le mode interactif, l'option --interactive ou -i, qui en cas de fichier existant demande si on doit l'écraser:

user@machine:~$ cp --verbose --interactive cleanup.log /tmp/
cp : voulez-vous écraser « /tmp/cleanup.log » ? oui
« cleanup.log » -> « /tmp/cleanup.log »

Si l'on souhaite conserver les fichiers existants:

user@machine:~$ cp --verbose --no-clobber cleanup.log /tmp/

La copie n'a pas été effectuée.

Enfin pour finir citons le flag -r, -R ou --recursive qui permet de copier récursivement les répertoires.

- page 1 de 4