Alias ​​do Bash que chama um script em vez de definir o script como uma função

Alias ​​do Bash que chama um script em vez de definir o script como uma função

Tenho mais de 150 atalhos definidos em meu arquivo .bash_aliases. Alguns deles são comandos simples, por exemplo:

# Opens file with default program
o () { xdg-open "$@" & disown; }

# Folder shortcuts
alias ..='cd .. && ls'

Outros estão chamando um script que tenho em algum outro lugar da máquina, como:

alias i3exit='~/.config/i3/i3exit.sh'

E outros são scripts maiores definidos como o ocomando acima, apenas com 30-80 linhas.

Qual é a diferença entre um script definido diretamente como uma função bash e um alias que chama um script de um arquivo diferente? Um é preferível ao outro e, em caso afirmativo, por quê?

A intuição me diz que seria melhor ter arquivos de script separados, mas não tenho argumentos para isso.

Responder1

Se você definir isso em seu ~/.bash_aliasesarquivo, que é específico do Ubuntu e é originado ~/.bashrcem uma instalação padrão do Ubuntu, então sim, há uma sobrecarga, pois o arquivo será originado toda vez que você iniciar um novo shell interativo e sem login . Então, cada vez que você abre uma nova janela de terminal, por exemplo. Agora, com máquinas modernas, esta sobrecarga provavelmente será indetectável, mas pode ser um problema para máquinas mais antigas, sistemas embarcados ou se você começar a tercargasde funções complexas definidas.

Além disso, funções e aliases definidos desta forma não são acessíveis aos scripts por padrão. Portanto, se quiser usar uma dessas funções em seus scripts, você precisará fornecer .bashrc(ou .bash_aliases) explicitamente. Se você os tiver como arquivos de script externos em seu arquivo $PATH, isso não será necessário.

Minha regra pessoal se resume à complexidade dos comandos envolvidos e se a função/script que estou escrevendo provavelmente será útil para shells não interativos (por exemplo, outros scripts). Se eu estiver escrevendo várias dezenas de linhas de código, provavelmente irei movê-lo para um script. Se estou escrevendo algo que pode ser usado em muitos contextos diferentes e que provavelmente pode ser útil ao escrever outro script, então, novamente, irei movê-lo para um script.

Se, no entanto, eu quiser apenas uma pequena função simples como a que você mostra na sua pergunta, que só é realmente útil quando executada de forma interativa, então me limitarei às funções. Portanto, é realmente uma questão de sua preferência pessoal e de considerar como e quando você deseja usar as funções que está definindo.

informação relacionada