alias vs export para comandos simples

33

Para comandos simples como less, ¿es mejor hacer un alias o exportar las opciones? ¿Hay algún beneficio de uno sobre el otro?

Por ejemplo, si quiero lessusar siempre la -Ropción para mostrar caracteres sin formato, ambas soluciones funcionan:

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

Para un caso simple como este, ¿hay algún beneficio de uno sobre el otro? ¿Algún escenario donde uno causará problemas y el otro no?

He leído varias páginas infoy mantambién en Google, pero todavía estoy atascado en esto.

skittleys
fuente
1
No, realmente se reduce a preferencias personales. He votado para cerrar esto, ya que parece más basado en la opinión.
slm
Tres soluciones más: crear una función de shell (solo funciona en el shell pero no necesita ser interactiva); crea un script en ~ / bin o donde sea (tiene una sobrecarga de inicio de shell pero funciona inmediatamente en shells en ejecución y desde otros programas, y es persistente); archivos de configuración específicos del programa (para lessque pueda hacerlo usando lesskey)
deltab
3
@slm No está basado en opiniones, o al menos no estaba destinado a ser. Uno podría requerir muchos más gastos generales y utilizar recursos innecesariamente, especialmente en un escenario más complejo. Uno podría ser convencionalmente más correcto en el mundo * nix, o tal vez incluso haya un estándar formal en alguna parte. Los programadores se molestan por la "codificación descuidada" todo el tiempo, incluso cuando a todos los efectos alcanza el mismo objetivo.
skittleys

Respuestas:

30

Una diferencia entre los dos es que los alias son solo una función de shell. Las variables de entorno son heredadas por todos los subprocesos (a menos que se borren deliberadamente).

La variable de entorno sería más probable que funcione incluso si lessse lanzó indirectamente, como a través de otro shell (por ejemplo tcsh), man, vim, psql, etc.

200_success
fuente
3
En particular, los alias solo funcionan en shells interactivos : no puede usarlos en scripts de shell, que a veces puede desear. bash -c 'alias ll="ls -l"; ll'no usará el alias.
deltab
¡Ah, no lo sabía! Entonces, si tengo export LESS='-R'en mi .zshrc, abro una sesión zsh y luego cambio a bash en esa misma sesión (sin exportación en .bashrc), ¿la variable de entorno aún se establecerá? Yo hubiera pensado tanto se perdería ....
skittleys
@deltab ah, sí, sé sobre esa distinción, gracias a los problemas de coloración de grep. Gracias por señalarlo.
skittleys
1

Depende en gran medida de la herramienta que esté utilizando. Habrá herramientas que le permitirán usar cualquiera, otras que solo permitirán una.

Hay comandos que son llamados por otros y leen las variables de entorno y aceptan los mismos conmutadores, pero agregar a cada uno el mismo conmutador es una molestia, como los compiladores make, ya que aquí brillan las variables de entorno. Estableces la variable y te olvidas de ella. También es una ventaja que puede ser temporal y funcionar para un solo comando.

En pocas palabras, es una cuestión de preferencias y la mejor acción para la tarea, habrá momentos en los que configurar un alias es más fácil y permanente que una variable de entorno y otros momentos en los que necesita una serie de herramientas que se comporten de la misma manera que lo haría Variables del entorno de amor.

Braiam
fuente