Exile on Keyboard St. - Blog sur Linux et Debian

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

Tag - complétion bash

Fil des billets - Fil des commentaires

lundi 9 octobre 2017

Disposer de la complétion Bash avec Maven

L'outil de build Maven utilisé pour les projets Java a au moins un inconvénient, à savoir que par défaut aucune complétion n'est proposée dans le Terminal.

Que ce soit pour la liste des cibles ou phases ou des options comme skipTests ou maven.test.skip, dont personne ne se souvient et que tout le monde utilise ... (mai cela est une autre affaire), rien n'est proposé pour aider le développeur que vous êtes.

Heureusement, quelqu'un s'est chargé d'écrire un fichier de complétion Bash pour Maven.

Il suffit d'aller voir le dépôt maven-bash-completion et de copier le fichier de complétion dans /etc/bash.completion.d:

sudo \
    wget https://raw.github.com/dimaj/maven-bash-completion/master/bash_completion.bash \
    --output-document /etc/bash_completion.d/mvn

Vous verrez qu'ensuite, tout est plus agréable. Par exemple les cibles sont proposées quand on appuie sur TAB, exactement comme c'est le cas avec .... un Makefile !!!

vendredi 9 juin 2017

Complétion bash et utilisateur root

La complétion bash nous facilite bien la vie au quotidien puisqu'elle nous aide dans la saisie des options et paramètres des lignes de commandes sans avoir besoin de consulter les man pages.

Mais est t'elle toujours activée ?

J'ai fait le test avec Debian Stretch mais les résultats sont les mêmes avec Debian Jessie.

Lorsque j'utilise un utilisateur non root, la complétion bash est activée que j'utilise un Shell de login (avec Ctrl Alt F1) ou un Shell normal.

Si je tappe apt-get suivi de la touche TAB:

debian@stretch:~$ apt-get 
autoclean        changelog        dist-upgrade     install          source
autoremove       check            download         purge            update
build-dep        clean            dselect-upgrade  remove           upgrade

bash me propose bien la complétion qui convient à la commande apt-get.

Si maintenant je me connecte avec root, j'obtiens le résultat suivant:

debian@stretch:~$ su
Mot de passe : 
root@stretch:/home/debian# apt-get 
.bash_history         .dmrc                 .local/               Téléchargements/
.bash_logout          Documents/            Modèles/              Vidéos/
.bashrc               .gnupg/               Musique/              .Xauthority
Bureau/               .ICEauthority         .profile              .xsession-errors
.config/              Images/               Public/               .xsession-errors.old

Avec l'utilisateur "normal", ici debian, cela fonctionne car le fichier .bashrc par défaut de l'utilisateur se termine comme ceci:

debian@stretch:~$ tail .bashrc 
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

ce qui n'est pas le cas pour l'utilisateur root:

root@stretch:/home/debian# cat /root/.bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.

# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
# export LS_OPTIONS='--color=auto'
# eval "`dircolors`"
# alias ls='ls $LS_OPTIONS'
# alias ll='ls $LS_OPTIONS -l'
# alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

Cette section "enable bash completion in interactive shells" qui n'existe pas dans le fichier /root/.bashrc est bien présente dans le fichier /etc/bash.bashrc mais elle y est commentée:

root@stretch:/home/debian# tail -n 25 /etc/bash.bashrc  | head -n 8
# enable bash completion in interactive shells
#if ! shopt -oq posix; then
#  if [ -f /usr/share/bash-completion/bash_completion ]; then
#    . /usr/share/bash-completion/bash_completion
#  elif [ -f /etc/bash_completion ]; then
#    . /etc/bash_completion
#  fi
#fi

Il suffit donc de la ré-activer pour que la complétion fonctionne aussi pour root.

Une fois cela fait, la section dans le .bashrc utilisateur n'est plus nécessaire.

lundi 17 avril 2017

Un installeur d'archives pour Linux: liar

Quand on développe sous Linux, on est souvent amené à installer des logiciels sans être connecté en tant que root.

Ces logiciels livrés sous forme d'archive .zip ou .tar.gz la plupart du temps sont installés dans l'arborescence de l'utilisateur courant $HOME.

Cette façon d'installer un logiciel manuellement comprend les étapes suivantes:

  • Le téléchargement de l'archive
  • La création du répertoire d'installation
  • Le changement de répertoire
  • La décompression de l'archive

Toutes ces opérations manuelles, outre le fait qu'elles sont rébarbatives et conduisent trop souvent à des erreurs notamment sur les flags à utiliser pour décompresser l'archive.

De plus, il nous faut ensuite créer des liens symboliques vers les exécutables du logiciel, par exemple dans $HOME/bin, pour en faciliter son utilisation.

Le projet Linux Installer for ARchives ou liar comble ce vide en fournissant une ligne de commande permettant de réaliser toutes ces opérations en une seule fois.

liar permet donc d'installer, de lister et de supprimer tout logiciel livré sous forme d'archive dans le répertoire de votre choix, avec optionnellement la création des liens symboliques.

L'installation de liar est très simple puisqu'il suffit de copier un seul script Shell dans votre arbrorescence. La complétion bash peut également être utilisée à condition d'ajouter le fichier de complétion dans /etc/bash_completion.d/.

La documentation de Linux Installer for ARchives se trouve sur Framagit comme le reste du projet.

Cette documentation liste l'ensemble des fonctionnalités de liar et illustre de nombreux exemples d'utilisation. Elle n'est pour l'instant disponible qu'en Anglais.

liar est un logiciel libre, distribué selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation, version 3 de la Licence (ou toute version ultérieure).

Pour en savoir plus sur le projet, vous pouvez consulter la vidéo d'introduction à liar: