alias vs eksport dla prostych poleceń

33

W przypadku prostych poleceń, np less. Czy lepiej utworzyć alias lub wyeksportować opcje? Czy jest jakaś przewaga jednej nad drugą?

Na przykład, jeśli chcę lesszawsze używać -Ropcji wyświetlania nieprzetworzonych znaków, oba te rozwiązania działają:

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

Czy w przypadku takiego prostego przypadku jest jakaś przewaga jednego nad drugim? Jakieś scenariusze, w których jeden spowoduje problemy, a drugi nie?

Przeczytałem kilka stron infoi manstron, a także googlowanie, ale nadal mam to.

kręgle
źródło
1
Nie, tak naprawdę sprowadza się to do osobistych preferencji. Głosowałem za jej zamknięciem, ponieważ wydaje się bardziej oparte na opiniach.
slm
Trzy kolejne rozwiązania: utwórz funkcję powłoki (działa tylko w powłoce, ale nie musi być interaktywna); utwórz skrypt w ~ / bin lub gdziekolwiek (ma narzut związany z uruchamianiem powłoki, ale działa natychmiast w uruchamianiu powłok i innych programów i jest trwały); specyficzne dla programu pliki konfiguracyjne ( lessmożesz to zrobić za pomocą lesskey)
deltab
3
@slm Nie jest oparte na opiniach, a przynajmniej tak nie było. Można by wymagać znacznie większego obciążenia i niepotrzebnie wykorzystywać zasoby, szczególnie w bardziej złożonym scenariuszu. W świecie * nix można konwencjonalnie być bardziej poprawnym, a może gdzieś istnieje nawet formalny standard. Programiści denerwują się przez cały czas „niechlujnym kodowaniem”, nawet jeśli dla wszystkich celów i celów osiąga ten sam cel.
skittleys

Odpowiedzi:

30

Jedną z różnic między nimi jest to, że aliasy są tylko funkcją powłoki. Zmienne środowiskowe są dziedziczone przez wszystkie podprocesy (chyba że zostały celowo wyczyszczone).

Zmienna środowiskowa będzie bardziej prawdopodobne, aby działać, nawet jeśli lessjest uruchomiony pośrednio, na przykład za pośrednictwem innej powłoce (np tcsh), man, vim, psql, itd.

200_sukces
źródło
3
W szczególności aliasy działają tylko w interaktywnych powłokach: nie można ich używać w skryptach powłoki, co czasem może być potrzebne. bash -c 'alias ll="ls -l"; ll'nie użyje aliasu.
deltab
ah, nie wiedziałem tego! Więc jeśli mam export LESS='-R'w moim .zshrc, otwórz sesję zsh, a następnie przełącz się na bash w tej samej sesji (bez eksportu w .bashrc), zmienna środowiskowa będzie nadal ustawiona?
Myślałbym,
@deltab ah, tak, wiem o tym rozróżnieniu dzięki problemom kolorystycznym grepa. Dziękuję za zwrócenie na to uwagi.
skittleys
1

Zależy to w dużej mierze od używanego narzędzia. Będą narzędzia, które pozwolą ci używać albo inne, które tylko jedno.

Istnieją polecenia, które są wywoływane przez innych i odczytują zmienne środowiskowe i akceptują te same przełączniki, ale dodanie do nich tego samego przełącznika jest kłopotliwe, podobnie jak kompilatory, ponieważ maketutaj świecą zmienne środowiskowe. Ustawiasz zmienną i zapominasz o niej. To także plus, że może być czasowy i pracować dla jednego polecenia.

Podsumowując, jest to zbiór preferencji i najlepszych działań dla zadania, będą chwile, w których skonfigurowanie aliasu jest łatwiejsze i trwałe niż zmienna środowiskowa, a innym razem, gdy będziesz potrzebować szeregu narzędzi zachowujących się w taki sam sposób, w jaki chciałbyś kocham zmienne środowiskowe.

Braiam
źródło