Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
alias [Le 01/06/2010, 22:28] – Usage du FPATH plutot que de rédiger des fonction partout lilian_halias [Le 11/07/2026, 11:46] (Version actuelle) – coloration syntaxique ? krodelabestiole
Ligne 1: Ligne 1:
-====== Créer un alias ======+{{tag>console terminal}}
  
-Cette page sert à créer ses propres alias.+====== 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]].
  
-==== Qu'est ce qu'un alias ? ====+<note> 
 +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]]) : 
 +<code bash> 
 +if [ -f ~/.bash_aliases ]; then 
 + . ~/.bash_aliases 
 +fi 
 +</code> 
 +</note>
  
-Un //alias// est un raccourci dans la console permettant une facilité d'utilisation de certaines commandes longues à taper comme //dpkg-reconfigure//. Il suffira de taper "reconf" par exemple.+===== Forme d'un alias ===== 
 + 
 +Un **alias** est déclaré dans le fichier ''~/.bash_aliases'' avec une ligne du type : 
 +<code bash> 
 +alias nom_de_votre_alias='commande de votre alias' 
 +</code> 
 +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 ''%%'%%''). 
 + 
 +<note important>Il ne doit pas y avoir d'espace entre le nom de l'alias, le signe ''='' et la commande.</note> 
 + 
 +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 : 
 +<code bash> 
 +alias nom_de_votre_alias="commande de votre alias" 
 +</code> 
 +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 ''\''). 
 + 
 +<note> 
 +Avec [[:bash]] les variables entre guillemets doubles ''"'' sont interprétées, ce qui n'est pas le cas avec des guillemets simples ''%%'%%''. 
 +</note>
  
 +===== Utilisation =====
  
 <note important> <note important>
-Le fichier que nous allons éditer est très important pour votre utilisateur, si vous faites n'importe quoi il se pourrait que la console ait des bugs.+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 : 
 +<code bash>source ~/.bashrc</code>
 </note> </note>
-<note tip>Sur Ubuntu 10.04, les lignes mentionnées sont déjà décommentés, il vous suffira juste de touch ~/.bash_aliases , pour créer le fichier.</note> 
  
-Pour éviter de modifier trop souvent ce fichier sensible, il faut rechercher et décommenter les lignes suivantes du fichier $HOME/.bashrc (Pour l'ouvrir ouvrez un terminal puis tapez gedit .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'' : 
-<file> +<code bash> 
-if [ -f ~/.bash_aliases ]; then +alias update='sudo apt update && sudo apt upgrade && sudo snap refresh && sudo flatpak update' 
-    . ~/.bash_aliases +</code> 
-fi +il vous suffira alors de taper dans un [[:terminal]] : 
-</file>+<code>update</code> 
 +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]].
  
-Ensuite créez un fichier ~/.bash_aliases qui regroupera tous vos alias.+<note> 
 +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 :
 +<code bash>sudo !!</code>
 +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.
 +</note>
  
 +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 :
 +<code bash>alias sai='sudo apt install'</code>
 +Saisir :
 +<code bash>sai nom_programme</code>
 +installera le programme souhaité.
  
 +<note tip>Il est à noter que l'[[:console#auto-completion]] avec la touche ''Tab ↹'' fonctionne également avec les **alias**.</note>
  
-==== Création de l'alias ? ==== +===== Exemples =====
-<note important>Ceci n'est pas nécessaire si vous avez créé le fichier ~/.bash_aliases +
-.</note>+
  
-Pour créer votre alias, il suffit de [[tutoriel:comment_editer_un_fichier|modifier le fichier]] $HOME/.bashrc+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]]//.
  
-Vous devrez y trouver la ligne suivante :+===== Aller plus loin =====
  
-<file> +==== Lister les alias ====
-#alias l='ls -CF' +
-</file>+
  
-qui est un premier exemple d'//alias//. Ils sont sous la forme :+Il suffit de saisir la commande ''[[man>alias]]'' seule :<code>alias</code>
  
-<file> +==== alias avec sudo ====
-alias nom_de_votre_alias='commande de votre alias' +
-</file>+
  
-Il est également possible d'utiliser des guillemets doubles comme ceci :+Par défaut les **alias** ne sont pas accessibles en utilisant ''[[:sudo]]'', un exemple courant est de lister un répertoire système :  
 +<code bash>sudo ll 
 +# va retourner 
 +sudo: ll : commande introuvable 
 +</code> 
 +Pour que ce soit possible, ajouter dans les **alias** :((source : [[https://askubuntu.com/a/22043/385361]])) 
 +<code bash> 
 +sudo='sudo ' 
 +</code>
  
-<file> +==== Appeler un script ====
-alias nom_de_votre_alias="commande de votre alias" +
-</file>+
  
-Pour notre exemple plus haut on pourrait faire :+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 
 +<code bash>alias monscript='bash -c ~/Documents/scripts/test/monscript.sh'</code>
  
-<file> +==== Ajouter un alias provisoirement ====
-alias reconf='dpkg-reconfigure' +
-</file>+
  
-Voila, votre alias est créé. +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''.
-Pour pouvoir profiter de votre alias, il suffit de fermer toutes vos fenêtres de console ou de taper+
  
-<file> +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: 
-source ~/.bashrc +<code bash>alias sac='sudo apt clean'</code> 
-</file>+Jusqu'à la fermeture du [[:terminal]], la commande <code>sac</code>exécutera en fait un ''sudo [[:apt-cli|apt]] clean''.
  
-De cette manière, il est possible de passer des arguments qui seront passés en fin de la commande mémorisée dans le fichier. Si vous avez besoin de passer des arguments à l'intérieur de la commande mémorisée, il faut agir ainsi :+==== Retirer un alias provisoirement ====
  
-<file>+Pour retirer, et non [[#échapper un alias]], de la session du [[:terminal]] en cours, saisir 
 +<code bash>unalias mon_alias</code> 
 +Pour reprendre l'[[#Ajouter un alias provisoirement|exemple précédent]] saisir 
 +<code bash>unalias sac</code> 
 + 
 +==== 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 : 
 +<code bash>alias commande_systeme='commande_systeme -option parametre'</code> 
 +on peut utiliser la commande : 
 +<code bash>env commande_systeme</code> 
 +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** : 
 +<code bash> 
 +alias ping='ping -c 4' 
 +</code> 
 +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 : 
 +<code bash> 
 +\ping 
 +</code> 
 + 
 +==== 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 
 +<code bash>
 hy(){ hy(){
    history | grep -vE -e "[0-9]{1,4}  hy |history" | grep -iE -e $1 | less    history | grep -vE -e "[0-9]{1,4}  hy |history" | grep -iE -e $1 | less
-}</file>+}</code> 
 +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''.
  
-Les arguments sont mémorisés dans les variables $1 ... $9. Cette commande en exemple permet de chercher dans l'historique des commandes bash chaque exécution contenant le mot en argument. Exemple : pour chercher toutes les connexions par ssh : +Exemple pour chercher toutes les connexions par [[:SSH]] : 
-<code>hy ssh</code>+<code bash>hy ssh</code>
  
-Cependant, il n'est pas recommandé de sourcer des fonctions dans ce fichier, d'une part parcequ'il sera plus lourd à charger, et d'autre part, parceque plus il y aura de modification, plus il y a aura de risque d'erreur et donc qu'il ne se charge plus.+<note important> 
 +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. 
 +</note>
  
-Une solution permettant de joindre vos alias et vos fonctions est d'écrire une librairie, et de faire pointer la variable d'environnement $FPATH sur l'emplacement de votre librairie.+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) :
 +<code bash>
 +_apt_install_complete() {
 +    mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "$2");
 +}
 +complete -F _apt_install_complete aptin
 +</code>
  
-----+<note tip>Il existe également une application **[[https://github.com/cykerway/complete-alias|complete-alias]]** qui fournit cette fonctionnalité.</note>
  
-//Contributeurs : [[utilisateurs:odric88]] [[:utilisateurs:teke]] [[:utilisateurs:Psykocrash]] [[:utilisateurs: BeAvEr]]//+===== 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]].//