2013-07-18 13 views
7

Stworzyłem alias w pliku .bashrc:skrypt bash nie czyta alias w bashrc

alias java='java -Xmx1200m' 

ten alias działa po uruchomieniu polecenia java z mojej skorupy bezpośrednio.

Jednak, gdy polecenie java znajduje się wewnątrz skryptu bash (script.sh), ten alias nie zostaje aktywowany. W jaki sposób zapewnić, że aliasy w pliku .bashrc są akceptowane w skrypcie bash?

+1

duplikat http://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside -a-bash-shell-script – suspectus

Odpowiedz

5

Alias ​​nie jest rozwinięty w nieinteraktywnych powłokach.

Jedynym sposobem na utworzenie aliasu jest wygenerowanie skryptu docelowego z tym, który zawiera alias.

$ source .bashrc 
$ . custom_script.sh 
1

Aliasy są ograniczone do powłoki i nie działają w wykonywanych skryptach powłoki. Lepiej jest stworzyć zmienną.

+0

Jakiekolwiek obejście? –

+0

Co powiesz na używanie 'export java = 'java -Xmx1200m'' w' .bashrc'? – fedorqui

+0

jeśli skrypt powłoki jest wykonywany poza loginem użytkownika, np. Cron, może nie zostać wywołany - musi on pobrać .bashrc – Vahid

4

Cytując z bash manual:

Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see The Shopt Builtin).

Mówiąc następujących w skrypcie powinny działać:

shopt -s expand_aliases 
+0

Nie działa przynajmniej w systemie FreeBSD/OSX. 'expand_aliases' jest już domyślnie włączone. –

+2

@AinTohvri Musisz 'source $ HOME/.bashrc' w skrypcie. – devnull

+0

Yup, po 'shopt -s expand_aliases', zdałem sobie z tego sprawę. Pracuj teraz, dzięki! –

0

można uruchomić skrypt bash bash mocy w trybie interaktywnym; add -i do linii poleceń bash, jak ten skrypt. Teraz możesz użyć swoich aliasów.

#!/bin/bash -i 

alias lsd='ls -al | grep ^d' 

lsd 
0

Najprostszą odpowiedzią jest wykonanie 2 ważnych rzeczy lub nie będzie działać. W swoim drugim skrypcie wykonaj następujące czynności: -i dla trybu interaktywnego, i przejdź do części jak wspomniano poniżej.

#!/bin/bash -i 

# Expand aliases defined in the shell ~/.bashrc 
shopt -s expand_aliases 

Po tym, aliasów, które zostały zdefiniowane w ~/.bashrc będą dostępne w skrypcie powłoki (giga.sh lub any.sh) oraz do wszystkich funkcji lub dziecko w muszli takiego scenariusza.

Jeśli tego nie robią, otrzymasz błąd:

your_cool_alias: command not found 
Powiązane problemy