2015-06-09 30 views
5

Có cách nào để xuất khẩu một biến môi trường với một dấu gạch chéo trong tên như:Làm thế nào để thiết lập biến môi trường với một dấu gạch chéo trong khóa

export /myapp/db/username=someval

This post chỉ ra người ta có thể nhưng tôi không thể tìm ra cú pháp hợp lệ để làm như vậy.

Đối với nền:

Tôi đang sử dụng confd để tạo tập tin cấu hình từ một mẫu và lưu trữ quan trọng. Các cửa hàng tiêu biểu (lãnh sự, vv) sử dụng các khóa phân cấp như /myapp/db/username. Tôi muốn minh bạch cho phép chuyển đổi giữa việc sử dụng một biến môi trường dựa trên nhà cung cấp và một cửa hàng cấu hình tận dụng các khóa phân cấp.

+0

Tôi thường đề xuất sử dụng mảng kết hợp. 'khai báo -A a; a [/ myapp/db/username] = someval'. Chỉ có vấn đề là mảng không thể xuất được. – anishsane

Trả lời

1

export chỉ đánh dấu các định danh shell hợp lệ được xuất vào môi trường chứ không phải bất kỳ chuỗi nào có thể tạo thành cặp tên/giá trị hợp lệ trong môi trường. Tuy nhiên, bạn có thể sử dụng env để tạo ví dụ vỏ mới với môi trường như vậy.

env "/myapp/db/username=someval" bash 
+0

Rất thú vị, tôi không biết điều này là có thể. Làm thế nào bạn sẽ tham khảo như một biến từ vỏ, mặc dù? '$ {/ myapp/db/username}' bị nhầm lẫn vì thay thế xấu, và có vẻ như không phải là một mảng đặc biệt có chứa các biến môi trường. – ghoti

+0

Bạn không thể. Lớp vỏ chỉ có thể giao tiếp với môi trường thông qua ống kính của các biến shell. Nó chỉ có thể đọc và ghi vào các chuỗi môi trường của biểu mẫu 'NAME = VALUE' trong đó' NAME' là một trình nhận dạng trình bao hợp lệ và 'VALUE' có thể tùy ý trống. Sẽ không có lý do gì cho shell yêu cầu hỗ trợ rộng hơn, bởi vì lý do duy nhất để thêm các loại chuỗi khác là vì lợi ích của một chương trình mới, nhưng bạn có thể làm điều đó thông qua 'env'. – chepner

4

Có, bạn có thể xuất biến môi trường như vậy nhưng không xuất hiện từ tuyên bố bash export.

Trong khi bash sẽ từ chối tạo biến môi trường có tên, ví dụ: a/b, chúng ta có thể tạo nó bằng python và subshells do python tạo sẽ thấy.

Như một ví dụ, hãy xem xét lệnh python sau:

$ python -c 'import os; os.environ["a/b"]="2"; os.system("/bin/bash");' 

Nếu chúng ta chạy lệnh này, chúng tôi được đưa vào một subshell. Từ subshell đó, chúng ta có thể thấy rằng việc tạo ra các biến môi trường đã thành công:

$ printenv | grep a/b 
a/b=2 

(Tại thời điểm này, người ta có thể muốn thoát khỏi subshell (loại exit hoặc Ctrl-D) để trở về chương trình python sẽ xuất cảnh và trả lại cho chúng tôi về vỏ chính.)

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