{{tag>console terminal}}
====== Alias bash ======
Les **alias [[:bash]]** sont des substitutions de [[:commande_shell|commandes]]. On les utilise en particulier pour simplifier l'usage de commandes répétitives et/ou longues à entrer dans la [[:console]].
Il est possible de définir des **alias** dans le [[:fichier caché]] ''.bash_aliases'', qui se trouve dans le [[:arborescence#répertoire personnel]]. Si ce dernier n'existe pas, on peut [[:tutoriel:comment_modifier_un_fichier|le créer]] :
touch ~/.bash_aliases
Il est également possible de créer un **alias provisoire** tel qu'expliqué [[#ajouter un alias provisoirement|ici]].
Le fichier ''.bash_aliases'' est pris en compte grâce au code suivant dans le fichier ''~/.bashrc'' (celui-ci étant automatiquement interprété à chaque ouverture d'un onglet du [[:terminal]]) :
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
===== Forme d'un alias =====
Un **alias** est déclaré dans le fichier ''~/.bash_aliases'' avec une ligne du type :
alias nom_de_votre_alias='commande de votre alias'
où ''nom_de_votre_alias'' est la commande raccourcie que vous passerez manuellement dans le [[:terminal]], et ''commande de votre alias'' est la [[:commande_shell|ligne de commande]], avec les éventuelles options et paramètres que le système devra comprendre (conserver les guillemets simples ''%%'%%'').
Il ne doit pas y avoir d'espace entre le nom de l'alias, le signe ''='' et la commande.
Ainsi lorsque vous saisirez ''nom_de_votre_alias'' dans un [[:terminal]], ce sera réellement la ''commande de votre alias'' qui sera exécutée.
Il est également possible d'utiliser des guillemets doubles ''"'' comme ceci :
alias nom_de_votre_alias="commande de votre alias"
Ceci peut être utile si votre commande contient des guillemets simples. Mais à l'inverse attention dans ce cas à ce que votre commande elle-même ne contienne pas des guillemets doubles, sans quoi il faudra les échapper (en les précédant de ''\'').
Avec [[:bash]] les variables entre guillemets doubles ''"'' sont interprétées, ce qui n'est pas le cas avec des guillemets simples ''%%'%%''.
===== Utilisation =====
Pour que vos **alias** soient pris en compte après ajout dans le fichier ''.bash_aliases'', on peut soit relancer le [[:terminal]], soit saisir la commande :
source ~/.bashrc
Vous trouverez de nombreux [[#exemples]] d'**alias** en parcourant le [[:Web]] (ainsi que sur la page //[[:Commandes pratiques]]//), et mettrez en place ou adapterez ceux qui vous correspondent au mieux, mais pour l'exemple, si vous ajoutez ceci dans le fichier ''~/.bash_aliases'' :
alias update='sudo apt update && sudo apt upgrade && sudo snap refresh && sudo flatpak update'
il vous suffira alors de taper dans un [[:terminal]] :
update
pour [[:gestionnaire_de_mises_a_jour|mettre à jour]] votre système et les applications [[:deb]] installées avec [[:APT]], puis les applications [[:snap]] et les applications [[:Flatpak]].
Il est cependant préférable d'éviter d'inclure la commande ''[[:sudo]]'' dans la déclaration de l'**alias** si vous êtes débutant ou pour vous astreindre à demander manuellement l'[[:elevation_privileges|élévation des privilèges]] en gardant à l'esprit la portée des commandes.
Si besoin, la commande :
sudo !!
donne ponctuellement et rapidement les privilèges requis pour la commande précédemment entrée.
Voir aussi le chapitre //[[#alias avec sudo]]// ci-dessous.
La déclaration d'**alias** ne fige pas nécessairement la commande prédéfinie : on peut passer une commande déclarée par un alias -- comme mentionné précédemment -- et ajouter à celui-ci des paramètre qui seront simplement ajouter à la suite de la commande originale pour son interprétation.\\
Par exemple avec :
alias sai='sudo apt install'
Saisir :
sai nom_programme
installera le programme souhaité.
Il est à noter que l'[[:console#auto-completion]] avec la touche ''Tab ↹'' fonctionne également avec les **alias**.
===== Exemples =====
Chacun·e organise les **alias** à sa manière et il ne serait pas forcément utile de proposer des listes d'alias complètes en exemple, qui pourrait entrer en conflit les unes avec les autres, ou avec des commandes existantes.
C'est pourquoi pour des exemples de commandes à utiliser comme valeurs d'**alias**, mieux vaut consulter la page //[[:Commandes pratiques]]//.
===== Aller plus loin =====
==== Lister les alias ====
Il suffit de saisir la commande ''[[man>alias]]'' seule :alias
==== alias avec sudo ====
Par défaut les **alias** ne sont pas accessibles en utilisant ''[[:sudo]]'', un exemple courant est de lister un répertoire système :
sudo ll
# va retourner
sudo: ll : commande introuvable
Pour que ce soit possible, ajouter dans les **alias** :((source : [[https://askubuntu.com/a/22043/385361]]))
sudo='sudo '
==== Appeler un script ====
Si vous avez un [[:script]] [[:bash]] mais qu'il ne se trouve pas dans un [[:chemins|chemin]] correspondant au ''[[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]]'', il est possible de l'appeler via un **alias**. Par exemple
alias monscript='bash -c ~/Documents/scripts/test/monscript.sh'
==== Ajouter un alias provisoirement ====
Pour ajouter un **alias** uniquement pour la [[:session utilisateur|session]] du [[:terminal]] en cours, il s'agira de saisir la commande ''[[man>alias]]'' sous la même [[#Forme d'un alias|forme]] que celle à écrire dans le fichier ''.bash_aliases''.
Par exemple, si vous voulez utiliser provisoirement un **alias** pour supprimer les copies de [[:paquet|paquets]] installés avec l'outil [[:APT]], vous pouvez saisir:
alias sac='sudo apt clean'
Jusqu'à la fermeture du [[:terminal]], la commande sacexécutera en fait un ''sudo [[:apt-cli|apt]] clean''.
==== Retirer un alias provisoirement ====
Pour retirer, et non [[#échapper un alias]], de la session du [[:terminal]] en cours, saisir
unalias mon_alias
Pour reprendre l'[[#Ajouter un alias provisoirement|exemple précédent]] saisir
unalias sac
==== En cas d'homonymie avec les commandes système ====
En cas d'homonymie entre un **alias** et une commande système, c'est l'**alias** qui est appelé.
Pour exécuter la commande système, et non l'alias, une protection peut être employée avec la commande ''[[man>env.1|env]]''.
Avec :
alias commande_systeme='commande_systeme -option parametre'
on peut utiliser la commande :
env commande_systeme
Ainsi, ''commande_systeme'' sera employée sans option ni paramètre.
==== Échapper un alias ====
Il peut être utile de lancer une commande sans que l'alias ne soit pris en compte.
Exemple, vous avez créé cet **alias** :
alias ping='ping -c 4'
Et vous souhaitez lancer la commande ''[[man>ping]]'' sans les options définies par l'**alias**.\\
Pour cela il suffit de précéder la commande par le caractère d'échappement //antislash// ''\'', comme ceci :
\ping
==== Les fonctions ====
Les alias ne peuvent pas prendre d'argument (en tout cas pas ailleurs qu'en dernière position).
Les **[[https://www.gnu.org/software/bash/manual/html_node/Shell-Functions.html|fonctions bash]]** le permettent. Grâce à une fonction il est possible d'indiquer des arguments qui seront passés en fin de la commande / appel de la fonction.\\
Par exemple
hy(){
history | grep -vE -e "[0-9]{1,4} hy |history" | grep -iE -e $1 | less
}
Cette fonction permet de chercher dans l'historique des commandes bash chaque exécution contenant le mot en argument, argument mémorisé dans les variables ''$1'' à ''$9''.
Exemple pour chercher toutes les connexions par [[:SSH]] :
hy ssh
Cependant, il n'est pas recommandé d'ajouter des fonctions dans le fichier ''.bashrc'', d'une part parce qu'il sera plus lourd à charger, et d'autre part, parce que plus il y aura de modifications, plus il y a aura de risque d'erreur et donc qu'il ne se charge plus.
Une solution permettant de joindre vos **alias** et vos fonctions est d'écrire une librairie de fontions, et de faire pointer la variable d'environnement ''[[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]]'' sur l'emplacement de votre librairie.
===== Problème connu =====
Il se peut que vos **alias** ne supportent pas l'[[:console#auto-complétion]] dans le cas de l'utilisation de la commande ''[[:apt-cli|apt]]''. Pour remédier à cela [[:tutoriel:comment_modifier_un_fichier|ajouter]] ce contenu au fichier ''.bashrc'', en considérant que votre **alias** est ''aptin'' pour ''sudo apt install'' (adapter ensuite à vos besoin) :
_apt_install_complete() {
mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "$2");
}
complete -F _apt_install_complete aptin
Il existe également une application **[[https://github.com/cykerway/complete-alias|complete-alias]]** qui fournit cette fonctionnalité.
===== Voir aussi =====
* [[https://forum.ubuntu-fr.org/viewtopic.php?id=20437|Sujet du forum]] qui traite du sujet.
* [[http://www.it-connect.fr/creer-des-alias-de-commandes-sous-linux%ef%bb%bf/|Créer des Alias de commandes sous Linux]] sur IT-Connect
----
//[[:Contributeurs]] : [[:utilisateurs:odric88]], [[:utilisateurs:teke]], [[:utilisateurs:Psykocrash]], [[:utilisateurs: BeAvEr]], [[:utilisateurs: mydjey]], [[:utilisateurs: krodelabestiole]].//