alias vs export per comandi semplici


33

Per comandi semplici come less, è meglio creare un alias o esportare le opzioni? C'è qualche beneficio dell'uno rispetto all'altro?

Ad esempio, se voglio lessusare sempre l' -Ropzione per mostrare i caratteri non elaborati, entrambe le soluzioni funzionano:

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

Per un caso semplice come questo, c'è qualche vantaggio dell'uno sull'altro? Qualche scenario in cui uno causerà problemi e l'altro no?

Ho letto diverse pagine infoe ho mancercato su Google, ma sono ancora bloccato su questo.


1
No, si riduce davvero alle preferenze personali. Ho votato per chiudere poiché sembra più basato sull'opinione.
slm

Altre tre soluzioni: creare una funzione di shell (funziona solo nella shell ma non è necessario che sia interattiva); creare uno script in ~ / bin o ovunque (ha un overhead di avvio della shell ma funziona immediatamente nell'esecuzione di shell e da altri programmi ed è persistente); file di configurazione specifici del programma (perché lesspuoi farlo usando lesskey)
deltab,

3
@slm Non è basato sull'opinione, o almeno non doveva esserlo. Si potrebbe richiedere molto più sovraccarico e utilizzare inutilmente le risorse, soprattutto in uno scenario più complesso. Uno potrebbe essere convenzionalmente più corretto nel mondo * nix, o forse c'è persino uno standard formale da qualche parte. I programmatori si infastidiscono continuamente per la "codifica sciatta", anche quando a tutti gli effetti raggiunge lo stesso obiettivo.
skittleys,

Risposte:


30

Una differenza tra i due è che gli alias sono solo una funzione di shell. Le variabili di ambiente sono ereditate da tutti i sottoprocessi (a meno che non vengano deliberatamente cancellati).

La variabile di ambiente sarebbe più probabile che il lavoro, anche se lessviene lanciato indirettamente, come ad esempio attraverso un altro shell (ad esempio tcsh), man, vim, psql, etc.


3
In particolare, gli alias funzionano solo nelle shell interattive : non è possibile utilizzarli negli script di shell, che a volte si potrebbe desiderare. bash -c 'alias ll="ls -l"; ll'non utilizzerà l'alias.
deltab,

ah, non lo sapevo! Quindi se ho export LESS='-R'nel mio .zshrc, apro una sessione zsh, e poi passa a bash in quella stessa sessione (senza esportazione in .bashrc), la variabile d'ambiente sarà comunque impostata? Pensavo che entrambi sarebbero andati perduti ...
skittleys,

@deltab ah, sì, conosco questa distinzione, grazie ai problemi di colorazione di grep. Grazie per averlo precisato.
skittleys,

1

Dipende molto dallo strumento che stai usando. Ci saranno strumenti che ti consentono di utilizzare uno, altri che ne consentono solo uno.

Ci sono comandi che vengono chiamati da altri e che leggono le variabili di ambiente e accettano le stesse opzioni, ma aggiungere a ognuna la stessa opzione è una seccatura, come i compilatori come make, qui brillano le variabili di ambiente. Tu imposti la variabile e te ne dimentichi. È anche un vantaggio che può essere temporale e funzionare per un singolo comando.

In conclusione, è una questione di preferenze e la migliore azione per l'attività, ci saranno momenti in cui l'impostazione di un alias è più facile e permanente di una variabile di ambiente e altre volte in cui è necessario un array di strumenti che si comportano allo stesso modo in cui si farebbe amo le variabili d'ambiente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.