alias vs export para comandos simples

33

Para comandos simples como less, é melhor criar um alias ou exportar as opções? Existe algum benefício de um sobre o outro?

Por exemplo, se eu quiser lesssempre usar a -Ropção para mostrar caracteres brutos, ambas as soluções funcionarão:

  1. export LESS='-R'
  2. alias less='less -R'

Para um caso simples como este, existe algum benefício de um sobre o outro? Algum cenário em que um causará problemas e o outro não?

Eu li várias infoe várias manpáginas, além de pesquisar no Google, mas ainda estou preso a isso.

skittleys
fonte
1
Não, realmente se resume à preferência pessoal. Votei em encerrar isso, pois parece mais baseado em opiniões.
slm
Mais três soluções: crie uma função de shell (funciona apenas no shell, mas não precisa ser interativo); crie um script em ~ / bin ou em qualquer outro lugar (possui sobrecarga de inicialização do shell, mas trabalha imediatamente na execução de shells e de outros programas e é persistente); arquivos específicos do programa de configuração (para lessque você pode fazer isso usando lesskey)
deltab
3
@ slm Não é baseado em opiniões, ou pelo menos não deveria ser. Pode-se exigir muito mais sobrecarga e usar recursos desnecessariamente, especialmente em um cenário mais complexo. Alguém poderia ser convencionalmente mais correto no mundo * nix, ou talvez haja até um padrão formal em algum lugar. Os programadores ficam irritados com a "codificação desleixada" o tempo todo, mesmo quando, para todos os efeitos, atinge o mesmo objetivo.
Skittleys

Respostas:

30

Uma diferença entre os dois é que os aliases são apenas um recurso de shell. As variáveis ​​de ambiente são herdadas por todos os subprocessos (a menos que sejam deliberadamente limpos).

A variável de ambiente seria mais provável para o trabalho mesmo se lessé lançado indiretamente, tais como através de outro shell (por exemplo tcsh), man, vim, psql, etc.

200_success
fonte
3
Em particular, os aliases funcionam apenas em shells interativos : você não pode usá-los em scripts de shell, o que às vezes você pode querer. bash -c 'alias ll="ls -l"; ll'não usará o alias.
Deltab
ah, eu não sabia disso! Portanto, se eu tiver export LESS='-R'no meu .zshrc, abrir uma sessão do zsh e mudar para o bash nessa mesma sessão (sem exportação no .bashrc), a variável de ambiente ainda será definida? Eu teria pensado que ambos seriam perdidos ....
skittleys
@deltab ah, sim, eu sei sobre essa distinção, graças às questões de coloração do grep. Obrigado por apontar.
Skittleys
1

Depende muito da ferramenta que você está usando. Haverá ferramentas que permitem o uso de outras, outras apenas.

Existem comandos chamados por outras pessoas, que lêem as variáveis ​​de ambiente e aceitam as mesmas opções, mas adicionar a cada uma delas a mesma opção é um aborrecimento, como compiladores make, pois aqui as variáveis ​​de ambiente brilham. Você define a variável e esquece. Também é uma vantagem que pode ser temporal e funcionar para um único comando.

Bottom line, é uma matéria de preferências e a melhor ação para a tarefa, haverá momentos em que a configuração de um alias é mais fácil e permanente do que uma variável de ambiente e outras vezes em que você precisa de uma variedade de ferramentas que se comportem da mesma maneira que você faria amo variáveis ​​de ambiente.

Braiam
fonte