Bagaimana saya bisa mendaftar semua variabel shell?

18

Membaca tentang pertanyaan ini: Di zsh bagaimana saya bisa mendaftar semua variabel lingkungan? Saya bertanya-tanya, bagaimana saya bisa mendaftar semua variabel shell ?

Juga, apakah perbedaan antara variabel shell dan variabel lingkungan berlaku untuk shell selain zsh?

Saya terutama tertarik pada Bash dan Zsh, tetapi akan sangat bagus untuk mengetahui bagaimana melakukan ini di shell mainstream lainnya.

Josh
sumber

Jawaban:

21

Daftar semua variabel shell

bash: gunakan set -o posix ; set. Opsi POSIX ada di sana untuk menghindari menghasilkan terlalu banyak informasi, seperti definisi fungsi. declare -pjuga berfungsi.

zsh : gunakan typeset

Variabel shell dan variabel lingkungan

Variabel lingkungan tersedia untuk exec()proses anak -ed -ed (sebagai salinan. Jika proses orangtua mengubah variabel, lingkungan anak tidak diperbarui). Variabel non-lingkungan hanya tersedia untuk shell berjalan saat ini dan fork()subshell -ed. Perbedaan ini ada pada semua cangkang.

(selesai berkat komentar)

Uriel
sumber
declare -pmelakukan hal yang sama
Costas
Pertanyaannya juga ada jawabannya di sini: stackoverflow.com/questions/1305237/…
Uriel
1
set -o posixtidak ada di zsh; settidak menampilkan definisi fungsi.
vinc17
1
set -o posixadalah kesalahan sintaksis dalam kebanyakan shell.
mikeserv
3
Variabel Shell juga tersedia dalam proses anak. Perbedaannya muncul ketika proses anak mengeksekusi program baru: variabel lingkungan diteruskan exec, variabel shell tidak.
Barmar
7

Ada banyak alternatif:

printenv

Cetak nilai-nilai lingkungan yang ditentukan VARIABEL. Jika tidak ada VARIABEL yang ditentukan, cetak pasangan nama dan nilai untuk semuanya.

env

env - menjalankan program dalam lingkungan yang dimodifikasi

ekspor

Tetapkan variabel lingkungan. Tandai setiap nama untuk diteruskan ke proses anak di lingkungan .....

-p Menampilkan output dalam bentuk yang dapat digunakan kembali sebagai input.

Jika tidak ada nama yang diberikan, atau jika opsi `-p 'diberikan, daftar nama yang diekspor ditampilkan.

set

berguna untuk mendapatkan variabel shell juga.

Jika Anda memerlukan info tambahan (bilangan bulat, diekspor), Anda harus menggunakannya

mengeset

ekspor memiliki keuntungan, bahwa hasilnya dapat segera dibaca kembali ke shell.

Terakhir, ada

compgen -v

Tampilkan kemungkinan penyelesaian tergantung pada opsi.

yang menunjukkan semua variabel, shell dan lingkungan, tanpa nilai atau info tambahan mereka. Anda harus mengulang $ VARIABLE_NAME untuk menemukan nilai variabel. Tapi setidaknya daftarnya sudah lengkap. Itu milik bash , bukan zsh .

MariusMatutiae
sumber
1
exporttidak memiliki keuntungan lebih set, setidaknya, ketika datang untuk mengutip untuk masuk kembali shell. Dan printenvdan envsama sekali tidak tentang variabel shell, meskipun ini sering bertepatan dengan variabel lingkungan.
mikeserv
3

Dengan zsh, Anda dapat menggunakan typeset, yang memberikan lebih banyak informasi daripada set, misalnya jenis variabel. Anda masih dapat memfilter output dengan grepatau sed, tergantung pada apa yang Anda inginkan. Variabel lingkungan ditandai seperti exportedpada output.

vinc17
sumber