alias vs. função em scripts bash

11

Quero saber a diferença entre aliases e funções no shell bash - e quando usar qual deles.

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 deseja economizar energia e poder de processamento, gostaria especialmente de saber um pouco mais sobre as diferenças de desempenho. destas duas maneiras de estender a funcionalidade do bash são.

MaxAxeHax
fonte
1
Não precisa ser auto-humilhante. Se a sua pergunta não for desejada, ela será reduzida. E se alguém quiser que você esclareça sua pergunta, ele o fará em um comentário. Proibir as pessoas de editar sua postagem é meio que errado. Este site foi projetado para que tudo seja editável para todos.
K0pernikus
Eu não estava tentando proibir, mas apenas pedi para me dar uma chance de esclarecer se eles consideram necessário. Tive a experiência de fazer perguntas muito simples sobre tópicos que pouco conheço e, depois, as pessoas acham que é totalmente óbvio. Estou perguntando sobre algo mais complexo e me corrigindo sobre como não sei como pedir o que quero. . É claro que uma das grandes vantagens dessa plataforma é o fato de ser editável por colegas, e eu não estava tentando minar isso. Obrigado por seu feedback, me fez pensar :)
MaxAxeHax
Possível cross site duplicata de: unix.stackexchange.com/questions/30925/...
Ciro Santilli冠状病毒审查六四事件法轮功

Respostas:

10

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

Como exemplo, muitas vezes você quer ir direto para a área de trabalho na linha de comando, para fazer isso

alias desktop="cd ~/Desktop"

A partir daí você digita

desktop

no terminal e executará o cd ~/Desktoppara 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 simples de eco

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

Embora possa parecer semelhante a um alias quando você o chama

e Hello

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

Os aliases devem ser reservados para casos de uso simples. Exemplo pessoal - substituí meu rmcomando assim

alias rm='trash-put'

Sempre que eu faço uma rm, ela a envia para a lixeira, em vez de excluí-la do disco. Isso atende à minha falta de jeito no terminal onde posso (algumas vezes) excluir acidentalmente um arquivo importante.

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

Mas o que você pode fazer é percorrer todos os arquivos do diretório e passar o caminho do arquivo para sua função RenameAsPigLatin. A função RenameAsPigLatin pode ter 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 focar na renomeação por suas regras estranhas, enquanto o restante do script pode percorrer vários diretórios, conforme necessário.

Mendhak
fonte
2
Na minha opinião, há muitas razões para usar funções autônomas. Na verdade, eu tenho várias funções definidas junto com meus apelidos. Por exemplo, substituí o cd por uma função com o mesmo nome para que eu possa executar automaticamente um ls após cada CD sem sacrificar nenhuma funcionalidade. Isso não pode ser feito com um alias porque requer um pouco de lógica.
Scott Severance
3

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

Um exemplo clássico seria:

alias ll='ls -l'

O alias funciona apenas em um console interativo, não deve ser usado em scripts.

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

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

As funções são muito mais poderosas que os pseudônimos; elas podem ser usadas para criar programas muito complexos.

wjandrea
fonte