alias vs fonction dans les scripts bash

11

Je veux connaître la différence entre les alias et les fonctions dans le shell bash - et quand utiliser lequel.

Il semble évident que puisque les fonctions peuvent prendre des arguments, elles sont beaucoup plus puissantes - comme je travaille principalement sur la route avec un netbook et que je veux économiser de l'énergie et de la puissance de traitement, j'aimerais surtout en savoir un peu plus sur les différences de performances de ces deux façons d'étendre la fonctionnalité bash sont.

MaxAxeHax
la source
1
Pas besoin d'être humiliant. Si votre question n'est pas souhaitée, elle sera rejetée. Et si quelqu'un veut que vous clarifiiez votre question, il le dira dans un commentaire. Et interdire aux gens de modifier votre message est un peu raté. Ce site est conçu pour que tout soit modifiable pour tout le monde.
k0pernikus
Je n'essayais pas d'interdire, mais demandez simplement de me donner une chance de clarifier s'ils le jugent nécessaire. J'ai eu l'expérience de poser des questions très simples sur des sujets que je connais peu, puis des gens ont pensé qu'il était tout à fait évident que je posais des questions plus complexes et me corrigeait sur la façon dont je ne sais pas comment demander ce que je veux . Bien sûr, l'un des grands avantages de cette plate-forme est qu'elle est modifiable par des pairs, je n'essayais pas de miner cela. Merci pour vos commentaires, m'a fait réfléchir :)
MaxAxeHax
Copie intersite

Réponses:

10

Considérez les alias comme des surnoms. Vous pouvez avoir une commande que vous effectuez beaucoup mais que vous souhaitez raccourcir.

Par exemple, vous voulez souvent aller directement au bureau en ligne de commande, vous pouvez donc le faire

alias desktop="cd ~/Desktop"

A partir de là, il vous suffit de taper

desktop

dans le terminal et il effectuera le cd ~/Desktoppour vous.

Les fonctions contiennent de la logique. Dans une fonction, vous pouvez appeler plusieurs programmes différents. Voici une fonction d'écho simple

function e {
                echo $1 
                echo $1 $1
                echo $1 $1 $1                 
           }  

Bien qu'il puisse ressembler à un alias lorsque vous l'appelez

e Hello

Votre e () peut se produire de nombreuses choses différentes. Ce qui précède est un exemple simpliste.

Les alias doivent être réservés aux cas d'utilisation simples. Exemple personnel - j'ai remplacé ma rmcommande comme ceci

alias rm='trash-put'

Chaque fois que je fais un rm, il l'enverra dans la corbeille au lieu de le supprimer du disque. Cela répond à ma maladresse dans le terminal où je peux (parfois) accidentellement supprimer un fichier important.

Les fonctions , vous devez vous en souvenir, sont des morceaux de logique. En règle générale, vous n'utilisez pas de fonction autonome. Cela ferait partie d'un script plus large. Imaginez un script qui prend tous vos fichiers et les renomme dans leurs versions latines de porc. Ignorez qu'il existe différentes façons de le faire.

Mais ce que vous pourriez faire, c'est parcourir tous les fichiers du répertoire et passer le chemin d'accès à votre fonction RenameAsPigLatin. La fonction RenameAsPigLatin peut avoir une logique supplémentaire là-dedans impliquant des nombres, où vous décidez que les fichiers se terminant par des nombres ne doivent pas être renommés.

Immédiatement, vous pouvez voir l'avantage de l'avoir comme fonction. La fonction peut se concentrer sur le changement de nom selon vos règles étranges tandis que le reste du script peut parcourir divers répertoires si nécessaire.

Mendhak
la source
2
À mon avis, il existe de nombreuses raisons d'utiliser des fonctions autonomes. En fait, j'ai un certain nombre de fonctions définies avec mes alias. Par exemple, j'ai remplacé cd par une fonction du même nom afin que je puisse le faire automatiquement un ls après chaque cd sans sacrifier aucune fonctionnalité. Cela ne peut pas être fait avec un alias car cela nécessite un peu de logique.
Scott Severance
3

Un alias est un simple raccourci utilisé dans une console pour éviter de taper de longues commandes ou de répéter toujours les mêmes options.

Un exemple classique serait:

alias ll='ls -l'

Les alias ne fonctionnent que dans une console interactive, ils ne sont pas destinés à être utilisés dans des scripts.

La fonction peut être utilisée dans des scripts ou dans la console, mais est plus souvent utilisée dans des scripts.

Contrairement aux alias, qui sont juste remplacés par leur valeur, une fonction sera interprétée par le shell bash.

Les fonctions sont beaucoup plus puissantes que les alias, elles peuvent être utilisées pour construire des programmes très complexes.

wjandrea
la source