2012-06-23 14 views
15

Jestem całkiem nowy, bash i chcę, aby to dla aliasów env bash .. chcę zrobić coś jak następujeJak dołączyć zmienną środowiskową do aliasu dla basha?

alias foo="bar $(baz)" 

tak, że mogę zrobić coś jak następuje

> baz=40 
> foo 

i foo zostanie rozwinięty do komendy bar 40. Obecnie powyższe nie działa, ponieważ $ (baz) jest rozszerzany podczas tworzenia aliasu. Czy muszę zawinąć to w funkcję lub coś takiego?

Odpowiedz

31

Trzeba użyć apostrofów ('), aby zapobiec bash z rozszerzając zmienną podczas tworzenia aliasu:

$ alias foo='echo "$bar"' 
$ bar="hello" 
$ foo 
hello 
+1

Również badanie alias = 'echo \ $ bar' (tej samej idei, ekspansja jest tłumione) –

+4

Poprawna odpowiedź, po prostu uważać aliasing' test', jest to rzeczywista komenda. – Kevin

+4

'alias foo = 'echo" $ bar "". 'Eksportuj' jest niepotrzebny. – ormaaj

4

Pseudonimy nie masz „środowisko”. Pseudonim jest po prostu "głupim" podstawieniem tekstu. W pytaniu zmienna środowiskowa nie jest używana - tylko zmienna powłoki. Jeśli chcesz korzystać ze środowiska, użyj funkcji. W tym przypadku nie ma korzyści dla aliasu nad funkcją.

$ alias foo='echo "$bar"' 
$ bar=hi foo 

Nie generuje wyników, ponieważ środowisko ustawione dla prostej komendy nie ma zastosowania do rozszerzeń.

$ alias foo=$'eval \'echo "$bar"\'' 
$ bar=hi foo 
hi 

Jeśli zamiast tego użyto funkcji, nie byłoby problemu.

$ foo() { echo "$bar"; } 
$ bar=hi foo 
hi 

W razie wątpliwości należy zawsze korzystać z funkcji.

Edit

Technicznie, powyższe jest tylko bash. Wykonanie tego w pełni przenośny sposób jest prawie niemożliwe.

W desce rozdzielczej, mksh trybie POSIX, bash i inne powłoki POSIX można zrobić:

foo() { echo "$bar"; } 
bar=hi command eval foo 

Jednak to nie będzie działać w ksh93 lub zsh. (Zgłosiłem już błąd dla ksh93, ale nigdy nie można go naprawić.) W mksh i ksh93 powinieneś zdefiniować funkcje używając słowa kluczowego function, ale to nie jest POSIX. Nie jestem świadomy żadnego rozwiązania, które będzie działać wszędzie.

Co gorsza, dodatkowe wyjątki są dodawane do POSIX 2008-TC1 tak, że sposób przyporządkowania środowisko pracy będzie jeszcze bardziej skomplikowana. Proponuję ich nie używać, chyba że naprawdę wiesz, co robisz.

Powiązane problemy