Trong một thiết bị đầu cuối bash Linux, thường có nhiều biến môi trường đã được đặt, như $PATHvà $HOME.
Có thể thấy tất cả các biến môi trường đã được đặt không? Làm sao?
Trong một thiết bị đầu cuối bash Linux, thường có nhiều biến môi trường đã được đặt, như $PATHvà $HOME.
Có thể thấy tất cả các biến môi trường đã được đặt không? Làm sao?
Câu trả lời:
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 | sortvà export -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.
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.
printenv, vì cả hai envvà setcó các chức năng khác hơn là chỉ xuất ra môi trường.
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.
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!