2011-09-09 27 views
18

tôi có thể thiết lập một biến môi trường bên trong dấu nhắc bash như thế này:Làm thế nào để chèn một biến môi trường bên trong bash nhắc

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

Dấu nhắc không thay đổi khi tôi thay đổi biến môi trường: $FOO vì biến $FOO không được giải thích.

Tôi có thể làm việc xung quanh bằng cách thực hiện như sau, xuất PS1 lần nữa. Nhưng tôi muốn có thể làm điều đó trên một dòng:

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

Điều này có thể được thực hiện trong một dòng không?

Trả lời

31

bạn cần phải thêm dấu chéo ngược để có được nó đánh giá không ở thời điểm FOO assigment nhưng trong quá trình đánh giá PS1, vì vậy làm:

export PS1="[\$FOO]$ " 

thay vì:

export PS1="[$FOO]$ " 

Lưu ý \ trước $FOO.

+0

Bạn có thể có ký tự thoát trong biến '' '$ FOO''' không? – Plamen

+1

hoặc đặt lời nhắc trong dấu nháy đơn: 'xuất PS1 = '[$ FOO] $'' – Gary

15

Hãy thử đặt biến PROMPT_COMMAND:

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

PROMPT_COMMAND=prompt 

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

Bash cung cấp một biến môi trường được gọi là PROMPT_COMMAND. Nội dung của biến này được thực hiện như một lệnh Bash thông thường ngay trước khi Bash hiển thị một dấu nhắc.

Các vấn đề liên quan