2014-09-02 15 views
43

Ai đó có thể cho tôi biết cách chính xác để đặt một loạt các biến môi trường trong vỏ cá?cách đặt biến môi trường trong vỏ cá

Trong .config/cá/file config.fish tôi, tôi có một chức năng để thiết lập biến môi trường của tôi 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 gõ từ dấu nhắc lệnh setTESTENV và làm một env trong dòng lệnh , Tôi không thấy những thông tin này.

Trả lời

38

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

Sử dụng:

set -g -x 

Here "g" là dành cho toàn cầu.

8

Environment Variables in Fish

Tôi muốn nói thêm rằng, trong khi câu trả lời @ JosEduSol là không chính xác và không giúp giải quyết vấn đề OP, -g chỉ là thiết lập phạm vi là toàn cầu, trong khi -x đang gây ra các biến môi trường quy định để được xuất sang quy trình con.

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

57

Sử dụng Universal Variables

Nếu biến phải được chia sẻ giữa tất cả các trường hợp sử dụng cá hiện tại trên máy tính hiện tại và bảo quản trên khởi động lại của vỏ bạn phải sử dụng -U hoặc --universal:

set -Ux FOO bar 

Sử dụng set với -g hoặc --global không đặt biến cố định giữa các phiên bản vỏ

+9

Note , Không gắn thêm vào các biến phổ biến trong tệp 'config.fish', bởi vì các biến này sau đó sẽ nhận được lâu hơn với mỗi thể hiện shell mới. Thay vào đó, chỉ cần chạy 'set-Ux' ** một lần ** tại dòng lệnh. Và nó sẽ được lưu trữ trong tệp '.config/fish/fishd.MACHINE_ID', trong đó MACHINE_ID thường là địa chỉ MAC của bạn. –

1

tùy chọn khác là để chạy:

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

nơi env_file.txt chứa hàng của định dạng VAR=VALUE

này có các lợi ích của việc giữ các biến trong một định dạng được hỗ trợ bởi vỏ khác và các công cụ

Các vấn đề liên quan