alias vs. função em scripts bash

8

Eu quero saber a diferença entre aliases e funções no shell bash - e quando usar qual delas.

Parece óbvio que, como as funções podem receber argumentos, elas são muito mais poderosas - como trabalho principalmente na estrada com um netbook e quero economizar energia e poder de processamento, eu gostaria especialmente de saber um pouco mais sobre o que as diferenças de desempenho dessas duas maneiras de estender a funcionalidade bash são.

    
por MaxAxeHax 15.07.2012 / 16:58

2 respostas

6

Pense em aliases como apelidos. Você pode ter um comando que você executa muito, mas quer encurtar.

Como exemplo, muitas vezes você quer ir direto ao desktop na linha de comando, então você pode fazer isso

alias desktop="cd ~/Desktop"

A partir daí, basta digitar

desktop

no terminal e ele irá executar o cd ~/Desktop para você.

Funções contém lógica. Em uma função, você pode fazer chamadas para vários programas diferentes. Aqui está uma função de eco simples

function e {
                echo  
                echo  
                echo                    
           }  

Embora pareça semelhante a um alias quando você o chama

e Hello

Seu e () pode ter várias coisas diferentes acontecendo. O acima é um exemplo simplista.

Aliases devem ser reservados para casos de uso simples. Exemplo pessoal - Eu substituí meu comando rm como este

alias rm='trash-put'

Sempre que eu fizer um rm, ele será enviado para a lixeira em vez de excluí-lo do disco. Isso atende a minha falta de jeito no terminal onde eu posso (às vezes) acidentalmente excluir um arquivo importante.

Funções , você precisa lembrar, são partes da lógica. Você não usaria uma função autônoma, normalmente. Seria parte de um roteiro maior. Imagine um script que pegue todos os seus arquivos e os renomeie para as versões latinas do porco. Ignore que existem maneiras diferentes de fazer isso.

Mas o que você pode fazer é percorrer todos os arquivos no diretório e passar o caminho de arquivo para a sua função RenameAsPigLatin. A função RenameAsPigLatin pode ter uma lógica extra envolvendo números, onde você decide que os arquivos que terminam com números não devem ser renomeados.

Imediatamente você pode ver o benefício de tê-lo como uma função. A função pode se concentrar na renomeação por suas regras estranhas, enquanto o resto do script pode percorrer vários diretórios, conforme necessário.

    
por Mendhak 15.07.2012 / 17:51
2

Um alias é um atalho simples usado em um console para evitar a digitação de comandos longos ou sempre repetir as mesmas opções.

Um exemplo clássico seria:

alias ll='ls -l'

O alias funciona apenas em um console interativo, eles não devem ser usados em scripts.

A função pode ser usada em scripts ou no console, mas é mais usada em scripts.

Ao contrário dos aliases, que são apenas substituídos por seus valores, uma função será interpretada pelo shell bash.

As funções são muito mais poderosas que os aliases, elas podem ser usadas para construir programas muito complexos.

    
por Ael Ombreglace 15.07.2012 / 18:01

Tags