2011-09-09 16 views
18

mogę ustawić zmienną środowiskową wewnątrz wierszu bash jak ten:Jak wstawić zmienną środowiskową wewnątrz bash poprosi

export PS1="[\[email protected]\H/$FOO \W]\$ " 

Monit nie zmienia się przy zmianie zmiennej środowiskowej: $FOO ponieważ zmienna $FOO nie jest interpretowane.

Mogę obejść to, wykonując następujące czynności, ponownie eksportując PS1. Ale chciałbym móc to zrobić na jednej linii:

[[email protected] ]$ echo $FOO 
foo 
[[email protected] ]$ export PS1="[$FOO]$ " 
[foo]$ export FOO=bla 
[bla]$ 

Czy można to zrobić w jednym wierszu?

Odpowiedz

31

trzeba dodać odwrotny ukośnik, aby nie oceniać w momencie FOO assigment ale podczas oceny PS1, tak zrobić:

export PS1="[\$FOO]$ " 

zamiast:

export PS1="[$FOO]$ " 

Uwaga na \ przed $FOO.

+0

Czy można jednak uzyskać znaki w postaci zmiennej '' 'FOO''''? – Plamen

+1

lub wpisz monity w pojedyncze cudzysłowy: 'export PS1 = '[$ FOO] $' – Gary

15

Spróbuj ustawić zmienną PROMPT_COMMAND:

prompt() { 
    PS1="[$FOO]$ " 
} 

PROMPT_COMMAND=prompt 

Od http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x264.html:

Bash zapewnia zmienną środowiskową o nazwie PROMPT_COMMAND. Zawartość tej zmiennej jest wykonywana jako zwykłe polecenie Bash tuż przed wyświetleniem monitu Bash.

Powiązane problemy