Vous n'avez pas encore de notification

Page d'accueil

Options d'affichage

Abonné

Actualités

Abonné

Des thèmes sont disponibles :

Thème de baseThème de baseThème sombreThème sombreThème yinyang clairThème yinyang clairThème yinyang sombreThème yinyang sombreThème orange mécanique clairThème orange mécanique clairThème orange mécanique sombreThème orange mécanique sombreThème rose clairThème rose clairThème rose sombreThème rose sombre

Vous n'êtes pas encore INpactien ?

Inscrivez-vous !

Comment créer un alias pour Bash, Cmd ou PowerShell ?

Un petit quicky ?
Comment créer un alias pour Bash, Cmd ou PowerShell ?
Crédits : Dacian_G/iStock/Thinkstock

Les alias sont de petits raccourcis en ligne de commandes qui permettent de se faciliter la vie. Un outil méconnu, pourtant largement disponible tant sous Linux que sous Windows.

Lorsque l'on utilise un système d'exploitation, on a parfois affaire à la ligne de commandes pour y exécuter des tâches de manière plus ou moins régulières. Lorsqu'il s'agit de lister les fichiers d'un répertoire, c'est en général assez simple avec des commandes comme dir ou ls. Puis il y a des cas plus compliqués.

Lorsqu'il faut enchaîner de longues commandes et paramètres par exemple, ou lorsque l'on ne veut pas avoir à retenir une syntaxe un peu trop verbeuse. On en a vu un exemple récemment avec la substitution d'utilisateur sous Windows bien plus complexe que sous Linux, avec deux commandes qui se présentent de la sorte :

sudo commande
runas /noprofile /user:Utilisateur_Administrateur commande

Dans ces différentes situations, un outil assez simple peut vous aider : l'alias. Voici comment en créer.

Bash Linux, un simple fichier à éditer

Commençons par des systèmes où l'on utilise souvent un terminal : les distributions GNU/Linux et leur Bash. Cet interpréteur est loin d'être le seul disponible, mais c'est le plus courant, c'est pour cela que nous l'utilisons comme exemple. La documentation des alias est disponible par ici.

Par défaut, plusieurs sont créés, vous pouvez en voir la liste avec la commande suivante :

alias

Vous verrez ainsi la forme sous laquelle ils sont déclarés : 

alias nom_de_lalias='commande'

Si vous tapez cette ligne dans un terminal, l'alias va être créé et sera valable jusqu'à la fin de la session. On peut faire le test cette commande permettant de mettre à jour le système et de faire le ménage :

alias fup='sudo apt -y update && sudo -y apt full upgrade && sudo apt -y autoremove'
fup

Pour rendre cet alias permanent, vous pouvez l'enregistrer dans le fichier de configuration de bash ou celui dédié aux alias (qui n'existe pas par défaut), ils sont cachés à la racine du répertoire utilisateur :

nano .bashrc
nano .bash_aliases

Notez que des alias peuvent s'appeler entre eux (attention à l'ordre de déclaration). En reprenant l'exemple ci-dessus :

alias up='sudo apt -y update'
alias ug='sudo apt -y upgrade'
alias ar='sudo apt -y autoremove'
alias fup='up && ug && ar'

Les alias peuvent également être utilisés conjointement à des paramètres de la ligne de commandes :

alias sap='sudo apt -y' 
sap update
sap full-upgrade

Les macros de l'invite de commandes Windows

Sous Windows, le terminal classique ou invites de commandes (cmd) dispose aussi d'une syntaxe simple et assez ancienne pour gérer des alias (appelés macros) passant par doskey.

doskey ls=dir

Pour lister les macros existantes ou leur historique d'usage des commandes de l'invite : 

doskey /m
doskey /h

Par défaut, aucune macro n'est présente. On rappellera au passage quelques raccourcis pratiques :

  • F7 : affiche l'historique de l'invite
  • F8 : effectue une recherche dans l'historique
  • F9 : lance un élément de l'historique à travers son numéro
  • ALT+F7 : efface l'historique de l'invite
  • ALT+F10 : efface les macros 

Doskey a néanmoins deux défauts principaux. Le premier c'est qu'il faut lui dire les arguments auxquels il doit s'attendre. Si l'on tape par exemple la commande suivante : 

ls c:\

On aura le résultat d'un simple dir et non dir c:\, l'argument étant ignoré. Il faut donc modifier la déclaration : 

doskey ls=dir $*

Vous pouvez aussi utiliser jusqu'à neuf arguments ($1 à $9) et différentes commandes de suite ($T comme séparateur). L'autre problème, c'est que ces macros sont non persistantes. C'est-à-dire qu'elles sont effacées dès que la fenêtre est fermée. Vous pouvez néanmoins en charger plusieurs d'un coup via un fichier :

doskey /macrofile=fichier.txt

La seule solution est donc de passer par le lancement de cette commande au démarrage du système. Vous trouverez un exemple de la méthode à suivre, via un ajout dans la base de registre, dans ce dépôt GitHub.

PowerShell : comme pour Bash

Avec PowerShell, les choses sont forcément plus simples. Voir la liste des alias ou en ajouter un se résume à :

Get-Alias
Set-Alias nom commande

Par défaut de nombreux alias sont configurés, ls renvoie par exemple à Get-ChildItem. Plusieurs paramètres sont disponibles permettant de définir un alias comme en lecture uniquement, privé, lui ajouter une description, etc.

Les paramètres en ligne de commandes sont passés directement à l'alias, le système est ainsi assez proche de Bash plus que de Doskey. Là encore, les alias sont non persistants par défaut avec un simple fichier texte à éditer.

Set-Alias np notepad
$Profile
np $Profile

Les trois lignes ci-dessus permettent de créer un alias qui ouvrira un fichier dans le Bloc-notes de Windows, d'afficher le chemin du fichier contenant le profil utilisateur et de l'ouvrir (ou le créer puisqu'il n'existe pas par défaut).

On peut alors lui ajouter des lignes d'alias. Notez enfin que les expressions complexes peuvent vous donner du fil à retordre, devant passer par une fonction. Ainsi, pour lancer la mise à jour des applications Chocolatey avec les droits administrateur depuis une session en étant dépourvu on ne peut pas simplement utiliser :

Set-Alias chup Start-Process powershell.exe -Verb RunAs 'choco upgrade all'

Il faut donc plutôt opter pour ces deux lignes :

Set-Alias chup UpgradeChoco
function UpgradeChoco {Start-Process powershell.exe -Verb RunAs 'choco upgrade all'}
62 commentaires
Avatar de Exagone313 Abonné
Avatar de Exagone313Exagone313- 09/05/19 à 09:10:22

Par contre sur un shell comme Bash, il vaut mieux utiliser une fonction plutôt qu'un alias. Un alias permet de remplacer le premier mot d'une commande (voire plus s'il y a un espace à la fin de l'alias). Alors qu'une fonction lance exactement les commandes dans la fonction (les arguments en plus ont du sens seulement si on les utilise explicitement).

up() {
apt update
}

Édité par Exagone313 le 09/05/2019 à 09:12
Avatar de tazvld Abonné
Avatar de tazvldtazvld- 09/05/19 à 09:27:09

Les alias (et les commandes du coup) sont des outils pour des "blagues" à faire aux collègues qui oublient de fermer leur sessions, le tout en modifiant le .bashrc pour que ça soit bien persistant. Passons le classique mais bien dégueulasse " alias ls='rm -rf' " là où on peut bien saboter à coup d'ouverture de site web "alias cd='firefox ' " ou pour lancer des fork bomb plus ou moins violente (en shell ":(){ :|:& };:" qui se résume à créer une fonction ":" qui consiste à s'appeler 2 fois en parallèles et de lancer la dite fonction ainsi crées : plantage assuré de l'ordinateur, impossible de le récupéré autre qu'en rebootant)

Avatar de Baldurien Abonné
Avatar de BaldurienBaldurien- 09/05/19 à 09:33:00

Assez étonnant. Et on remarque au passage la logique du batch:

doskey ls=dir $*

J'ai cru à une erreur de la rédaction, à une confusion avec bash, mais non :

doskey /?
Les codes spéciaux suivants s’utilisent pour définir les macros Doskey :
$T Séparateur de commande. Autorise plusieurs commandes dans une macro.
$1-$9 Paramètres de batch. Comme %1-%9 dans les programmes de commandes.
$* Équivaut à tout ce qui suit le nom de macro sur la ligne de commande

Édité par Baldurien le 09/05/2019 à 09:33
Avatar de SartMatt Abonné
Avatar de SartMattSartMatt- 09/05/19 à 09:38:32

C'est justement logique d'avoir une syntaxe différente de l'habituel %.

Parce que justement, le % serait interprété au moment de l'exécution de la commande doskey, donc il faudrait l'échapper, et il y aurait des risques de confusion ou d'oubli de l'échappement... Une syntaxe clairement différente limite le risque.

Avatar de boogieplayer Abonné
Avatar de boogieplayerboogieplayer- 09/05/19 à 09:38:37

tazvld a écrit :

Les alias (et les commandes du coup) sont des outils pour des "blagues" à faire aux collègues qui oublient de fermer leur sessions, le tout en modifiant le .bashrc pour que ça soit bien persistant. Passons le classique mais bien dégueulasse " alias ls='rm -rf' " là où on peut bien saboter à coup d'ouverture de site web "alias cd='firefox ' " ou pour lancer des fork bomb plus ou moins violente (en shell ":(){ :|:& };:" qui se résume à créer une fonction ":" qui consiste à s'appeler 2 fois en parallèles et de lancer la dite fonction ainsi crées : plantage assuré de l'ordinateur, impossible de le récupéré autre qu'en rebootant)

Ouiiiihihihihihihi..... :francais:

Avatar de WereWindle INpactien
Avatar de WereWindleWereWindle- 09/05/19 à 09:45:16

t'es un peu maléfique, non ? :stress:
(après, une session laissée accessible mérite une sanction, on est d'accord :transpi:)

Avatar de boogieplayer Abonné
Avatar de boogieplayerboogieplayer- 09/05/19 à 09:57:44

Exagone313 a écrit :

Par contre sur un shell comme Bash, il vaut mieux utiliser une fonction plutôt qu'un alias. Un alias permet de remplacer le premier mot d'une commande (voire plus s'il y a un espace à la fin de l'alias). Alors qu'une fonction lance exactement les commandes dans la fonction (les arguments en plus ont du sens seulement si on les utilise explicitement).

Je ne savais pas qu'on pouvais faire ça dans le fichier .bashrc mais maintenant que tu le dis ça parait logique. Je vais essayer

Avatar de vince120 Abonné
Avatar de vince120vince120- 09/05/19 à 09:58:03

WereWindle a écrit :

t'es un peu maléfique, non ? :stress:
(après, une session laissée accessible mérite une sanction, on est d'accord :transpi:)

Ici c'est le mail à l'équipe "j'amène les croissants demain matin", rien de plus...

Avatar de tazvld Abonné
Avatar de tazvldtazvld- 09/05/19 à 10:01:10

C'est les versions "pire". Mais tu peux être très gentil en mélangeant les commandes, le classique étant de remplacer cd par ls et ls par cd. On doit aussi pouvoir aliaser plein de commande à rien (strictement elle ne fait rien).
Je n'ai pas la commande, mais il doit y avoir même moyen de binder "SIGINT" (ctrl+c) à la touche entrée ce qui rend tout de suite plus difficile le lancement de commande (mais on n'est plus dans l'alias).

Avatar de WereWindle INpactien
Avatar de WereWindleWereWindle- 09/05/19 à 10:01:29

déjà c'est plus constructif :yes:

Il n'est plus possible de commenter cette actualité.
Page 1 / 7
  • Introduction
  • Bash Linux, un simple fichier à éditer
  • Les macros de l'invite de commandes Windows
  • PowerShell : comme pour Bash
S'abonner à partir de 3,75 €