Làm thế nào để xuất các biến được đặt, tất cả cùng một lúc?


39

setlệnh hiển thị tất cả các biến cục bộ như dưới đây. Làm cách nào để xuất tất cả các biến này cùng một lúc?

>set
a=123
b="asd asd"
c="hello world"

bạn có nghĩa là xuất tất cả cùng một lúc? bạn có thể sử dụng dấu chấm phẩy để định nghĩa trong một dòng ... như a = 123; b = "asd asd"; c = "hello world"
Raza


2
setcũng hiển thị các chức năng và biến hệ thống như BASH_VERSION
glenn jackman

Câu hỏi của bạn không rõ ràng. Có phải đó là một đoạn trích của setđầu ra mà bạn đang hiển thị? Nếu vậy, thì đó không phải bashlà. Bạn có muốn xuất tất cả các biến hiện được đặt bao gồm các biến shell đặc biệt không? Hay chỉ có 3 biến như trong export a b c?
Stéphane Chazelas

export ${!T*}sẽ xuất bất kỳ tham số xác định có tên bắt đầu bằng T. Thật không may, dường như không có cách nào dễ dàng tạo ra một danh sách tất cả các tham số được xác định.
chepner

Câu trả lời:


72

Chạy lệnh sau, trước khi đặt các biến:

set -a 

trang nam:

-a
Khi tùy chọn này được bật, thuộc tính xuất sẽ được đặt cho từng biến mà việc gán được thực hiện;

Để tắt tùy chọn này, chạy set +asau đó.

Thí dụ:

set -a
. ./environment
set +a

Nơi environmentchứa:

FOO=BAR
BAS='quote when using spaces'

13
Điều này phải được kích hoạt trước khi gán cho các biến, mặc dù. Nó không làm gì với các biến được gán trước đó.
chepner

1
@chepner, Cảm ơn tôi đã quên đề cập đến điều đó !!
nitin

Điều này cũng tự động xuất các chức năng theo cách tương tự nhưfunction example(){ echo good; }; export -f example
Oliver I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. Trước tiên, hãy lấy tất cả các biến môi trường đã đặt: (set -o posix ; set) Tham khảo: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-c hiệnly-d xác định-en môi-biến-in- a- linux-ba

  2. Nhận tất cả các tên biến môi trường, được phân tách bằng dấu cách: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Tham chiếu: awk - In giá trị cột không có dòng mới và thêm dấu phẩyhttps://stackoverflow.com/questions/14212993/THER-expression-to-match-a-potype-inside- lệnh awk

  3. Bây giờ, chúng ta cần xuất các biến này, nhưng xargs không thể làm điều này bởi vì nó tạo ra tiến trình con, xuất phải được chạy theo quy trình hiện tại. echo "export" ...xây dựng một lệnh chúng ta muốn, sau đó sử dụng `` để chạy nó. Đó là tất cả: p.


Welcomme đến U & L SE. Có lẽ bạn có thể chỉnh sửa bài viết của bạn và đưa ra một số giải thích.
Archemar 6/03/2015

1
Sẽ không đúng khi giả sử tên biến môi trường sẽ chỉ bao gồm az và AZ. Chúng thường bao gồm cả dấu gạch dưới và chữ số, vì vậy mô hình sẽ là [a-zA-Z_][a-zA-Z0-9_]*. Có một số biến thể về điều này dựa trên lớp vỏ bạn đang sử dụng, nhưng đây là cách tiếp cận an toàn / di động.
Chris Johnson

Điểm tốt @ChrisJohnson - đã cập nhật!
Wil Moore III

3

Bạn có thể thêm vào exporttên biến thông qua awkevalkết quả đầu ra:

eval $(printenv | awk -F= '{ print "export " $1 }')

2
printenvin các biến đã được xuất. Điều đó cũng sẽ không hoạt động đúng nếu có các biến chứa các ký tự dòng mới.
Stéphane Chazelas

2

Điều này hoạt động nếu vỏ của bạn là bash (cũng có thể là các vỏ khác)

export > /my/env/var/file

tệp mới của bạn sẽ chứa một bãi chứa tất cả các biến được xác định hiện tại ... với các mục như

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

sau đó để kích hoạt shell hiện tại với tất cả các vấn đề env vars

source  /my/env/var/file
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.