cách đặt các biến môi trường trong shell cá


90

Ai đó có thể vui lòng cho tôi biết cách chính xác để thiết lập một loạt các biến môi trường trong vỏ cá là gì không?

Trong tệp .config / fish / config.fish của tôi, tôi có một hàm để thiết lập các biến môi trường của mình như vậy

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

khi tôi nhập từ dấu nhắc lệnh setTESTENVvà thực hiện một envtrong dòng lệnh, tôi không thấy những thông tin này.

Câu trả lời:


70

Các biến bạn đang khai báo được giữ trong phạm vi cục bộ bên trong hàm của bạn.

Sử dụng:

set -g -x

Đây là " g" dành cho toàn cầu.


151

Sử dụng các biến chung

Nếu biến phải được chia sẻ giữa tất cả các cá thể người dùng hiện tại trên máy tính hiện tại và được bảo toàn qua các lần khởi động lại shell bạn phải sử dụng -Uhoặc --universal:

set -Ux FOO bar

Sử dụng set-ghoặc --globalkhông đặt biến liên tục giữa các phiên bản shell


Ghi chú :

Không thêm vào các biến phổ quát trong config.fishtệp, vì các biến này sau đó sẽ dài hơn với mỗi phiên bản shell mới. Thay vào đó, chỉ cần chạy set -Uxmột lần tại dòng lệnh. Và nó sẽ được lưu trữ trong tệp .config/fish/fishd.MACHINE_ID, nơi MACHINE_IDthường là địa chỉ MAC của bạn.


Các biến của tôi không được lưu vào fishd.MACHINE_ID, mà thay vào đó được lưu vào~/.config/fish/fish_variables
Seanny123,

biến của tôi đã được lưu trong ~/.config/fish/fish_variablesubuntu 20.04
Igor Markelov

11

một tùy chọn khác là chạy:

export (cat env_file.txt |xargs -L 1)

trong đó env_file.txt chứa các hàng có định dạng VAR=VALUE

điều này có lợi khi giữ các biến ở định dạng được hỗ trợ bởi các trình bao và công cụ khác


Trong trường hợp bạn muốn tránh nhận xét, bạn có thể: export (grep "^[^#]" .env |xargs -L 1)
Guillermo

10

Các biến môi trường ở cá

Tôi muốn nói thêm rằng, mặc dù câu trả lời của @ JosEduSol không sai và giúp giải quyết vấn đề OP, nhưng -gchỉ đặt phạm vi là toàn cục, trong khi -xđang khiến biến môi trường được chỉ định được xuất sang các quy trình con.

Lý do ở trên không thành công là bởi vì @cfpete đang đặt các env vars bên trong một hàm và phạm vi mặc định sẽ là cục bộ cho hàm đó.

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.