Cách tốt nhất để đặt biến môi trường trong .bashrc là gì?


11

Khi thiết lập một biến trong .bashrc, tôi có nên sử dụng biến này không?

export VAR=value

Hay điều này là đủ?

VAR=value

Chính xác sự khác biệt là gì (nếu có)?

Câu trả lời:


16

Cách tốt nhất

export VAR=value

Sự khác biệt

Đang làm

VAR=value

chỉ đặt biến cho thời lượng của tập lệnh ( .bashrctrong trường hợp này). Các tiến trình con (nếu có) của tập lệnh sẽ không được xác định VAR và khi tập lệnh thoát khỏi VAR.

export VAR=value

rõ ràng thêm VARvào danh sách các biến được truyền cho các tiến trình con. Bạn muốn thử nó? Mở vỏ, làm

PS1="foo > "
bash --norc

Shell mới nhận được dấu nhắc mặc định. Nếu thay vào đó bạn làm một cái gì đó như

export PS1="foo > "
bash --norc

shell mới nhận được lời nhắc bạn vừa đặt.

Cập nhật: như Ian Kelling ghi chú bên dưới các biến được đặt liên .bashrctục trong trình bao có nguồn gốc .bashrc. Tổng quát hơn bất cứ khi nào shell cung cấp một biến script (sử dụng source scriptnamelệnh) được đặt trong script vẫn tồn tại trong vòng đời của shell.


1
"chỉ đặt biến cho thời lượng của tập lệnh (.bashrc trong trường hợp này)" Đó là sai / sai. Các biến được đặt theo cách này vẫn tồn tại trong trình vỏ tương tác đọc .bashrc.
Ian Kelling

PS1là một ví dụ xấu về một biến được xuất dưới dạng biến môi trường. Nó chỉ có ý nghĩa đối với các tiến trình con là shell và nó được giải thích khác nhau bởi các shell khác nhau (ví dụ: bash và dash). Thực hành tốt nhất là chỉ cần đặt nó là một biến shell thông thường trong .bashrc. Ví dụ tốt hơn về các biến môi trường bao gồm HOME, PATH, EDITORvv
Anthony Geoghegan

10

Cả hai dường như chỉ hoạt động tốt, nhưng sử dụng xuất sẽ đảm bảo biến có sẵn cho các lớp con và các chương trình khác. Để kiểm tra điều này hãy thử điều này.

Thêm hai dòng này vào tệp .bashrc của bạn

TESTVAR="no export"
export MYTESTVAR="with export"

Sau đó mở một vỏ mới.

Chạy echo $TESTVARecho $MYTESTVARsẽ hiển thị nội dung của từng biến. Bây giờ bên trong cùng một shell đó loại bỏ hai dòng đó khỏi tệp .bashrc của bạn và chạy bashđể bắt đầu một lớp con.

Chạy echo $TESTVARsẽ có đầu ra trống, nhưng chạy echo $MYTESTVARsẽ hiển thị "với xuất"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.