Pourquoi vous ne devriez pas utiliser un chemin complet dans vos alias Linux
Agence web » Actualités du digital » Pourquoi vous ne devriez pas utiliser un chemin complet dans vos alias Linux

Pourquoi vous ne devriez pas utiliser un chemin complet dans vos alias Linux

Parfois, vous pouvez voir des conseils qui suggèrent d'utiliser des chemins complets dans vos alias. Arrêtez un instant. Est-ce vraiment le comportement que vous voulez et comment pouvez-vous même décider?

Qu'est-ce qu'un alias?

Un alias est un moyen plus court de taper une commande. Lorsque vous exécutez un alias, votre shell le remplace par du texte prédéfini qui peut ajouter des arguments ou exécuter une commande complètement différente.

Vous pouvez créer un alias en utilisant la commande d'alias comme celle-ci:

        alias word="command"

Une fois que vous avez créé un tel alias, votre coquille remplacera mot (Au début d'une commande) avec le contenu complet des doubles citations. Ainsi, par exemple, si vous courez:

        alias ls="ls -GF"

Ensuite, chaque fois que vous tapez « LS », vous obtiendrez « LS -GF » à la place.

Les alias sont vraiment utiles car ils peuvent vous faire gagner du temps et simplifier les commandes plus longues. Ils peuvent également vous aider à modifier le comportement des programmes en variant leurs valeurs par défaut.

Par exemple, j'ai récemment rencontré une astuce dans le manuel FD sur le passage des drapeaux au programme en utilisant un alias:

        alias fd="/usr/bin/fd --no-ignore-vcs"

Par défaut, le programme filtre les fichiers qui sont ignorés par les systèmes de contrôle de version. L'indicateur « –No-inigore-vcs » inverse ce comportement par défaut, donc le définir en tant qu'alias modifie la défaut de façon permanente.

Ce qui m'a frappé à ce sujet, c'est le chemin complet de l'alias. Je suis habitué aux alias sans chemin, comme le LS Exemple ci-dessus. Alors, comment l'inclusion de la voie complète affecte-t-elle les choses?

Que fait un alias avec un chemin?

Si votre shell remplace « FD » par « / usr / bin / fd, » il ne devrait pas y avoir de vrai problème. Exécuter une commande via son chemin complet est parfaitement acceptable; Si un exécutable n'est pas sur votre chemin, c'est le seul moyen de l'exécuter.

Des problèmes peuvent cependant survenir lorsque vous contournez le système de chemin, en utilisant des chemins absolus vers les commandes. Que se passe-t-il si FD se déplace de / usr / bin vers / usr / local / bin? Votre alias générera une erreur et ne parviendra pas à s'exécuter.

Ce problème n'est pas si mauvais: vous pouvez identifier la cause et le résoudre. Mais que se passe-t-il si vous avez plusieurs versions de la même commande installées à différents endroits dans votre chemin? Ce n'est pas une situation rare; Par exemple:

Sur mon système, la commande RI existe dans deux endroits: / opt / homebrew / bin et / usr / bin. Parce que ces chemins sont répertoriés dans cet ordre sur mon chemin, la version Homebrew prend un précédent. Mais un alias avec un chemin absolu pourrait causer des problèmes:

        alias ri="/usr/bin/ri -f markdown"

La commande RI exécutera désormais toujours la version dans / usr / bin, même si une version est installée plus tard dans le répertoire Homebrew, ou ailleurs. En effet, l'utilisation d'un chemin absolu complet dans votre alias brise le système de chemin, qui est l'une des grandes forces de Linux.

Et qu'en est-il d'un alias sans chemin?

Au lieu d'un chemin complet, vous pouvez – et devriez – utiliser le nom de commande uniquement. Par exemple:

        alias fd="fd --no-ignore-vcs"
alias ls="ls -GF"
alias ri="ri -f markdown"

Ces alias respecteront le système de chemin et exécuteront la commande la plus appropriée, à condition que votre chemin soit configuré correctement. De plus, vous pourrez toujours les remplacer facilement. Pour contourner l'alias et / ou utiliser une version spécifique d'une commande, il suffit de l'exécuter via le chemin absolu:

        /usr/bin/ri

Et que diriez-vous de l'autre moitié de l'alias?

Si vous avez un peu expérimenté avec des alias et des chemins, vous avez peut-être remarqué qu'ils dépendent de la façon dont vous exécutez une commande. Les alias sont très littéraux et ne s'appliqueront que lorsqu'ils correspondent exactement à ce que vous tapez, pas seulement lorsqu'ils correspondent à la commande que vous exécutez.

Par exemple, sur mon système, la commande LS vit à / bin / ls, et j'ai un alias ls = « ls -gf »:

L'exécution de LS exécute cet alias, de sorte que la sortie est colorisée et les types de fichiers sont indiqués:

Dans les coulisses, l'exécutable / bin / ls est toujours exécuté; Il reçoit simplement ces options comme des arguments. Cependant, l'exécution / bac / ls ne fait pas directement la même chose:

C'est simplement parce que LS n'est pas littéralement la même chaîne que / bac / lsmême si c'est le même fichier. Ce qui peut vous surprendre encore plus, c'est qu'il est absolument bien de spécifier un chemin complet sur le côté gauche d'un alias aussi:

        alias /bin/ls="ls -GF"

En ce qui concerne la coquille, «/ bin / ls» n'est pas du tout un chemin; C'est juste une chaîne contre laquelle correspondre. Il n'y a aucun lien entre celui-ci et le fichier réel sur ce chemin; Il n'a même pas besoin d'être a / bin / ls pour qu'un tel alias existe.

Bien sûr, il n'y a aucune raison réelle d'alias / bac / ls comme ça. Les alias sont censés être courts et faciles à taper, et le système de chemin vous permet d'éviter de taper le chemin complet d'une commande en premier lieu. Vous pouvez essayer de couvrir toutes vos bases pour vous assurer que LS s'exécute toujours avec certaines options, mais vous ne pourrez jamais répondre à toutes les possibilités:

Alors, que dois-je utiliser?

N'oubliez pas que les alias sont un peu comme les macros: ils sont un simple mécanisme de correspondance et de remplacement. Bien que vous puissiez les utiliser pour fournir des options par défaut, gardez à l'esprit qu'ils ont une portée particulière: pour une utilisation interactive en ligne de commande.

Si vous écrivez un script shell, il y a beaucoup à prendre en compte: les alias, les fonctions de shell, les intégrés, etc. Assurez-vous de savoir lequel vous avez l'intention de courir et lequel fonctionnera réellement.

La commande intégrée exécutera toujours un programme, contournant toutes les fonctions, intégres ou alias qui peuvent exister. De même, vous pouvez contourner les alias en citant votre commande de manière valide:

        pwd
"pwd"
'pwd'

★★★★★