Eu li este tópico sobre onde colocar aliases.
Agora, vamos supor que meu comando personalizado seja bastante elaborado (recebe argumentos na entrada, é composto de vários comandos executados um após o outro, quero preservá-lo em várias linhas para maior clareza, envolve aspas, aspas duplas, etc.), então quero defini-lo como uma função, por exemplo
sshdev_system_loop () {
while true; do
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Trying to log into ststem $2 as user $1 ."
timeout 10 ssh $1@$2
done
}
devo colocá-lo dentro .bash_aliases
ou no final .bashrc
ou dentro .profile
?
Por um lado, não quero incluí-lo, .bash_aliases
pois "estragará" a lista de
alias alias_name='command/list of commands'
e por outro lado, .bashrc
parece um arquivo administrado pelo sistema operacional, então não quero adicionar nada a ele.
Então, qual é a prática recomendada para adicionar funções como comandos personalizados no Ubuntu?
Depende em grande parte de você e de como você usa seu computador.
bash_aliases
não é um arquivo padrão, é algo que o Ubuntu adiciona ao sistema. Se você olhar o padrão do Ubuntu.bashrc
(/etc/skel/.bashrc
), verá:O Ubuntu se configura para originar (ler) esse arquivo (o
.
meio é ler o arquivo no shell atual), se ele existir. Portanto, se você está planejando migrar sua configuração para outro lugar, não usebash_aliases
nada.Se você se preocupa apenas com o Ubuntu, usar
bash_aliases
oubashrc
é a mesma coisa. Ambos serão lidos ao mesmo tempo, já que um origina o outro, então a escolha de qual usar fica a seu critério.Dito isto, o
.bashrc
arquivo foi totalmente projetado para ser editado pelo usuário e não para ser administrado pelo sistema operacional, portanto, sinta-se à vontade para editá-lo. Tradicionalmente, você colocaria aliases e funções em~/.profile
, no entanto, já que.bashrc
é lido toda vez que você inicia um novo shell interativo sem login, enquanto.profile
é lido apenas por shells de login interativos. Na prática, em um sistema gráfico moderno, isso significa que.bashrc
(e.bash_aliases
no Ubuntu) é lido toda vez que você abre um novo terminal, enquanto.profile
será lido somente quando você fizer login.bashrc
. muito longo para ser lido todas as vezes. No entanto, em sistemas modernos, isso realmente não faz nenhuma diferença perceptível. Nossas máquinas são rápidas o suficiente para ler arquivos maiores sem nenhum problema.Outra consideração é que
.profile
e.bashrc
são lidos por diferentes tipos de shell, login e não login, respectivamente, conforme mencionado acima. Veja minhas respostas aqui e aqui para mais detalhes sobre isso. A questão é que em sistemas tradicionais, ao executar um shell sem login,.profile
não é lido. no entanto, o Ubuntu, assim como seu pai, o Debian, tem uma linha especial em suas.profile
fontes.bashrc
:Tudo isso significa que você pode adicionar funções aos seus arquivos
.bashrc
ou.bash_aliases
conforme desejar, e eles ainda estarão disponíveis para login em shells. Você pode querer usar.profile
em vez disso, mas fique à vontade para usar.bashrc
. É para isso que serve: para o usuário definir coisas extras para seu shell.Algumas referências úteis:
Uma pequena variação na excelente resposta de Terdon:
Eu escolhi a solução para adicionar um novo bloco ao meu
.bashrc
com o seguinte conteúdo:Como você pode ver, o princípio é exatamente o mesmo do for
.bash_aliases
, exceto que prefiro ter minhas funções definidas em um arquivo separado.bash_functions
.Então, há ainda outra reviravolta nisso. Quando defino minha função, faço assim:
E então, eu realmente faço referência à função no meu
.bash_aliases
arquivo:Dessa forma, minha função aparece na lista de alias quando eu apenas executo
alias
, mas como começa com_
, sei que é uma função definida em.bash_functions
.