Các biến môi trường không thể truy cập được trong tập lệnh bash


22

Tôi gặp phải một vấn đề kỳ lạ. Tôi đặt một số biến env vào .bashrcvà nó hoạt động như bình thường:

echo $HADOOP_HOME
/home/me/dist/hadoop

Nhưng biến env không truy cập được khi thực thi các tập lệnh bash. Giả sử tôi tạo /tmp/sample.shvới nội dung dưới đây:

#! /bin/bash
echo $HADOOP_HOME

Khi tôi chạy trên kịch bản, lặp lại một dòng trống:

/tmp/sample.sh
   

1
Bạn có thể hiển thị phần có liên quan của bạn .bashrc? Tôi đoán là bạn không exporting : export HADOOP_HOME=/home/me/dist/hadoop, khi bạn chạy /tmpsample.sh` (sinh ra một cái mới bashvới môi trường mới) HADOOP_HOME không ở trong môi trường mới.
John N

Câu trả lời:


29

Đó là vì HADOOP_HOMEbiến không được xuất:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Khi bạn chạy một tập lệnh shell, tập lệnh đó sẽ chạy trong trường hợp bash của chính nó (đó là những gì #!/bin/bashđang làm) đó là một trình bao con của tập lệnh hiện tại. Các biến không được truyền cho các shell con theo mặc định, chỉ khi chúng được xuất. Hãy nghĩ về mỗi phiên bash là độc lập (phần lớn là như vậy). Bạn thường không muốn các biến được định nghĩa trong một để gây ô nhiễm môi trường của một biến khác. Đối với những trường hợp cần thiết, sử dụng export.

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.