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ư $PATH
và $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ư $PATH
và $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 set
lệnh tích hợp để hiển thị tất cả các biến môi trường đã được đặt. Các set
lệ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 env
lệ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. env
sẽ chỉ hiển thị các biến đã được đánh dấu để xuất. So sánh đầu ra của env | sort
và export -p
bạ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à env
một lệnh thực thi riêng biệt trái ngược với set
lệ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 set
lệ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 set
cung cấp đầu ra trong khi env
không.
Các env
lệ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 env
và set
có các chức năng khác hơn là chỉ xuất ra môi trường.
env
sẽ 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 -e
chính xác là những gì tôi muốn!