Czy jeden alias wpływa na inny alias?


14

Nie mam jeszcze wielu aliasów w moim pliku .bash_aliases. Dopiero niedawno odkryłem, jak przydatne mogą być.

Widzę, że jestem uzależniony od aliasów, więc zanim plik stanie się zbyt nieporęczny, chciałbym coś wyjaśnić, zadając bardzo proste pytanie. Czy jeden z aliasów wpływa na inny, czy zawsze powraca do pierwotnego polecenia?

Przykład może to wyjaśnić:

Mam na lsimię pseudonim ls -lF. Powiedzmy, że chciałbym również użyć aliasu ddo ls -l | grep -E "^d": używa dteraz ls -lFzamiast ls? Jeśli tak, czy jest to kwestia porządku w pliku konfiguracyjnym .bash_aliases?

man alias nie oświecił mnie.

Odpowiedzi:


20

Z aliasów (sekcja 6.6 instrukcji Bash) :

Pierwsze słowo każdego prostego polecenia, jeśli nie jest cytowane, jest sprawdzane pod kątem aliasu. Jeśli tak, to słowo jest zastępowane tekstem aliasu.

Dzieje się tak, gdy używasz aliasu, a nie podczas jego definiowania. Oto przykład:

$ alias a1='a2 hello'
$ alias a2='echo'
$ a1
hello
$ unalias a2
$ a1
bash: a2: command not found

1
OK, świetnie, dziękuję za ten przykład (a także za link do instrukcji Bash). Cytuję z podręcznika: „Zasady definiowania i używania aliasów są nieco mylące ... W prawie każdym celu funkcje powłoki są lepsze niż aliasy”. Chyba lepiej nauczę się wtedy wykonywać funkcje powłoki. :)
boehj

1
Tak. Aliasy mogą zaoszczędzić ci trochę pisania na typowe polecenia, ale na wszystko, nawet zdalnie skomplikowane pisanie niestandardowych funkcji do obsługi tego jest zwykle lepszą opcją.
Caleb

@Caleb @Gilles - Dziękuję wam. BTW, ls = 'ls --color' Widzę, że jestem bardzo przydatny. Uwielbiam tę stronę. :)
boehj

2
@boehj: Ogólna zasada polega na użyciu aliasu, gdy chcesz mieć automatyczne argumenty polecenia, używając nazwy polecenia lub niewielkiej odmiany i działa inaczej. Tak alias ls='ls --color', alias cp='cp -i'ale działa dla bardziej złożonych rzeczy. W szczególności uczynię twoją dfunkcję, abyś mógł przekazywać argumenty ls. [komentarz opublikowany w celu naprawienia mylącego braino, dzięki @cjm]
Gilles 'SO- przestań być zły'

@Gilles - OK, moim zadaniem na dziś jest nauczenie się replikacji djako funkcji powłoki.
boehj
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.