Một bản sao của môi trường truyền đến các vỏ con, vì vậy điều này hoạt động:
$ export MY_VAR=200
$ bash
$ echo $MY_VAR
200
nhưng vì nó là một bản sao, bạn không thể nhận được giá trị đó lên đến vỏ cha mẹ - ít nhất là bằng cách thay đổi môi trường.
Có vẻ như bạn thực sự muốn tiến thêm một bước, đó là tạo ra thứ gì đó hoạt động như một biến toàn cục, được chia sẻ bởi các vỏ "anh chị em" được khởi tạo tách biệt khỏi cha mẹ - như tab mới của bạn trong Gnome Terminal.
Hầu hết, câu trả lời là "bạn không thể, bởi vì các biến môi trường không hoạt động theo cách đó". Tuy nhiên, có một câu trả lời khác, đó là, bạn luôn có thể hack thứ gì đó. Một cách tiếp cận sẽ là ghi giá trị của biến vào một tệp, như ~/.myvar
, và sau đó đưa nó vào ~/.bashrc
. Sau đó, mỗi shell mới sẽ bắt đầu với giá trị được đọc từ tệp đó.
Bạn có thể tiến thêm một bước - đặt ~/.myvar
ở định dạng MYVAR=200
, sau đó đặt PROMPT_COMMAND=source ~/.myvar
, điều này sẽ khiến giá trị được đọc lại mỗi khi bạn nhận được lời nhắc mới. Nó vẫn không hoàn toàn là một biến toàn cầu được chia sẻ, nhưng nó bắt đầu hành động như vậy. Tuy nhiên, nó sẽ không kích hoạt cho đến khi lời nhắc trở lại, tùy thuộc vào những gì bạn đang cố gắng có thể là một hạn chế nghiêm trọng.
Và sau đó, tất nhiên, điều tiếp theo là tự động viết các thay đổi ~/.myvar
. Điều đó phức tạp hơn một chút và tôi sẽ dừng lại ở thời điểm này, bởi vì thực sự, các biến môi trường không có nghĩa là một cơ chế giao tiếp giữa các lớp vỏ, và tốt hơn là chỉ cần tìm một cách khác để làm điều đó.