Alias: différence entre .bash_rc, .bash_aliases et / usr / local / bin

9

En jouant avec Terminal, j'ai remarqué qu'il existe de nombreuses façons de créer des alias permanents .

Je suis un débutant Linux, et d'après ce que je sais, je fais:

  1. sudo ln -s /path/to/executable /usr/local/bin/desired_alias
  2. ajouter desired_alias = '/path/to/executable'à~/.bashrc
  3. décommenter ces lignes dans ~/.bashrc:

    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi

    et mettre desired_alias = '/path/to/executable'dans le~/.bash_aliases

tous ont le même effet.

Quelle est la différence entre les première et deuxième méthodes?

Strae
la source

Réponses:

10

Avec la première méthode, vous ne créez pas d'alias, vous créez un lien symbolique. Les liens symboliques sont l'abréviation de liens symboliques:

Les liens symboliques sont des fichiers qui agissent comme des pointeurs vers d'autres fichiers. [...] Un lien symbolique est un type de fichier spécial dont le contenu est une chaîne qui est le chemin d'accès d'un autre fichier, le fichier auquel le lien fait référence. En d'autres termes, un lien symbolique est un pointeur vers un autre nom et non vers un objet sous-jacent.

En savoir plus sur les liens symboliques ici et ici .

Ce n'est qu'avec la deuxième méthode que vous créez en fait un alias.

Les alias permettent de remplacer une chaîne par un mot lorsqu'il est utilisé comme premier mot d'une commande simple. Le shell conserve une liste d'alias qui peuvent être définis et désactivés avec les commandes intégrées alias et unalias (voir COMMANDES DE CONSTRUCTION DE SHELL ci-dessous). Le premier mot de chaque commande simple, s'il n'est pas cité, est vérifié pour voir s'il a un alias. Si c'est le cas, ce mot est remplacé par le texte de l'alias.

Vous pouvez définir un alias n'importe où où vous pouvez taper une commande et demander au shell ( bash dans ce cas) de l'interpréter, mais pour que l'alias soit disponible dans d'autres shells, il doit être défini dans un fichier interprété par le shell au démarrage (démarrage du shell, pas du démarrage de l'ordinateur).

Pour bash, ce sont /etc/bash.bashrc(à l'échelle du système) et ~/.bashrc. Ces fichiers sont interprétés lorsque le shell démarre en mode interactif (comme lors de l'utilisation Terminal). Je ne vais pas mentionner les fichiers de profil car ils ont un objectif différent.

Vous souhaitez donc ajouter vos alias pour les ~/.bashrcrendre disponibles dans chaque shell interactif.

La .bash_aliasesméthode accomplit exactement la même chose que de mettre les alias ~/.bashrcmais a l'avantage supplémentaire d'être plus facile à analyser et à manipuler par les programmes.

La . ~/.bash_aliasessource moyenne (charge) _~/.bash_aliases_dans le contexte du shell en cours d'exécution.

Li Lo
la source
@lilo tu m'as battu au tutoriel! +1
myusuf3
@gc Je frappe le sac alors allez-y sauvage :)
Li Lo
@lilo hahahha :)
myusuf3
1
Vous pensez peut-être que cela fonctionne de la même manière, mais ce n'est pas le cas. Veuillez lire les documents sur les liens symboliques que j'ai mentionnés dans ma réponse. Les liens symboliques et les alias ont des objectifs différents et ont été créés avec des objectifs différents à l'esprit. Pour vous donner un exemple pourquoi les liens symboliques ne fonctionnent pas comme des alias, essayez ceci - définissez un alias comme: alias px = "ps axu". Essayez maintenant d'accomplir la même chose avec des liens symboliques.
Li Lo
1
@Li Lo: j'ai compris la différence entre synlink et / usr / local / bin, mais ma question (c'est peut-être un peu hors sujet avec la question générale) est: à quoi sert exaclty / usr / local / bin?
Strae