Làm cách nào để xem danh sách tất cả các biến môi trường được xác định hiện tại trong thiết bị đầu cuối bash Linux?


Câu trả lời:


32

TL; DR: sử dụng(set -o posix ; set)


Theo hướng dẫn Bash, bạn có thể sử dụng setlệnh tích hợp để hiển thị tất cả các biến môi trường đã được đặt. Các setlệnh cũng sẽ hiển thị các định nghĩa của bất kỳ chức năng. Nếu bạn chỉ muốn xem các biến chứ không phải các chức năng, thì bạn có thể bật chế độ POSIX trước khi chạy lệnh set. Cách dễ nhất để làm điều đó là với set -o posix, nhưng nó sẽ bật chế độ POSIX cho đến khi bạn tắt nó đi set +o posix.

Do đó, lệnh sau sẽ hiển thị tất cả các biến môi trường được xác định bằng cách sử dụng một lớp con mà không ảnh hưởng đến tuân thủ POSIX trong trình bao hiện tại của bạn.

(set -o posix ; set)

@RedGrittyBrick và @iglvzx đã đề xuất sử dụng envlệnh, tuy nhiên lệnh này sẽ không cung cấp danh sách đầy đủ các biến môi trường. envsẽ chỉ hiển thị các biến đã được đánh dấu để xuất. So sánh đầu ra của env | sortexport -pbạn sẽ thấy những gì tôi muốn nói. Bạn có thể chạy comm -23 <(set -o posix; set) <(env|sort)nếu bạn muốn xem biến môi trường nào không được xuất.

Lý do cho sự khác biệt là envmột lệnh thực thi riêng biệt trái ngược với setlệnh được tích hợp sẵn. Theo hướng dẫn Bash, khi một lệnh được thực thi không phải là lệnh hoặc hàm tích hợp shell, nó sẽ chỉ nhận các biến môi trường đã được đánh dấu để xuất trong Bash . Có nhiều biến không được xuất. Do đó, nếu bạn muốn xem tất cả các biến mà shell của bạn đã xác định, bạn phải sử dụng setlệnh như được nêu trong hướng dẫn.

Bạn có thể dễ dàng tự kiểm tra hành vi này bằng các lệnh sau.

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

Bạn sẽ thấy setcung cấp đầu ra trong khi envkhông.


24

Các envlệnh với không có đối số sẽ in một danh sách các "xuất khẩu" biến môi trường và giá trị của họ. Các biến này được hiển thị cho các quy trình con - nhiều biến môi trường khác không được hiển thị với điều này và chỉ được sử dụng bên trong vỏ đang chạy, ví dụ như cho cấu hình.


10
Tôi thích printenv, vì cả hai envsetcó các chức năng khác hơn là chỉ xuất ra môi trường.
iglvzx

3
envsẽ chỉ in một danh sách các biến môi trường đã được đánh dấu để xuất. Nó sẽ không in tất cả các biến.
Sao biển

4
@ Starfish là đúng - điều đó có nghĩa là câu trả lời được chấp nhận này là rất sai. Đã chỉnh sửa để chỉ liệt kê các biến được xuất.
Volker Siegel

12
compgen -v

in các biến shell (nhưng không phải là các giá trị).

compgen -e

in các biến được xuất, tức là các biến được kế thừa bởi các tiến trình shell này bắt đầu (nhưng không phải là giá trị của chúng).

Sự khác biệt giữa các biến shell và biến xuất: https://unix.stackexchange.com/questions/3507/difference-b between-en môi-biến-and-exported-en môi-biến-in-b? Rq = 1


compgen -echính xác là những gì tôi muốn!
hao
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.