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ó)?
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:
export VAR=value
Đang làm
VAR=value
chỉ đặt biến cho thời lượng của tập lệnh ( .bashrc
trong 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 VAR
và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 .bashrc
tụ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 scriptname
lệnh) được đặt trong script vẫn tồn tại trong vòng đời của shell.
PS1
là 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
, EDITOR
vv
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 $TESTVAR
và echo $MYTESTVAR
sẽ 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 $TESTVAR
sẽ có đầu ra trống, nhưng chạy echo $MYTESTVAR
sẽ hiển thị "với xuất"