Bagaimana cara membuat daftar semua nama variabel dan nilainya saat ini?
Termasuk tidak hanya $HOME, $PWDdll tetapi yang lain yang telah Anda tetapkan.
Bagaimana cara membuat daftar semua nama variabel dan nilainya saat ini?
Termasuk tidak hanya $HOME, $PWDdll tetapi yang lain yang telah Anda tetapkan.
Jawaban:
Untuk bash: (shell standar di Ubuntu)
Masukkan perintah berikut di terminal untuk mencetak semua variabel lingkungan:
printenv
Untuk informasi lebih lanjut tentang perintah ini, baca printenvhalaman manual .
Untuk menampilkan daftar termasuk "variabel shell" Anda dapat memasukkan perintah berikutnya:
( set -o posix ; set ) | less
Ini tidak hanya akan menunjukkan kepada Anda variabel shell, tetapi juga variabel lingkungan.
Untuk informasi lebih lanjut terkait dengan topik ini, baca:
Untuk zsh: (shell tingkat lanjut)
Gunakan perintah berikut:
( setopt posixbuiltin; set; ) | less
Untuk informasi lebih lanjut tentang opsi ZSH, lihat zshoptionshalaman manual .
MYNEWVARIABLE=Ubuntudan menjalankannya printenvtidak muncul di sana. Mengapa begitu, dan bagaimana orang lain itu muncul?
export MYNEWVARIABLE=Ubuntudan akan bekerja seperti yang Anda harapkan.
set, itu mencantumkan variabel yang dibuat oleh Anda juga. Atau lakukanset | grep myvar
printenvadalah perintah eksternal, jadi ia hanya tahu tentang (dan mencetak) variabel lingkungan yang diekspor. setadalah perintah bash internal, jadi itu menunjukkan semua "variabel shell" (variabel lingkungan yang tidak diekspor) serta variabel lingkungan yang diekspor.
unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, tapi ini akan unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, dan ini akan unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. Menggunakan ekspor mengatakan "variabel yang saya setting harus menjadi bagian dari lingkungan yang diteruskan ke proses, bukan hanya variabel dalam shell ini." Contoh ketiga saya mengatakan "variabel harus menjadi bagian dari lingkungan yang diteruskan ke proses INI, tetapi tidak bertahan sesudahnya."
Saya tahu bahwa pertanyaan ini sudah cukup lama dan terjawab, tetapi saya pikir saya dapat menambahkan sedikit informasi yang berguna.
Dalam semua metode yang dijelaskan di atas, prosedur yang disarankan adalah:
env, atau
printenvatau apa punMasalah dari solusi ini adalah bahwa Anda melihat variabel lingkungan dari shell yang berjalan ke terminal . Anda tidak melihat variabel lingkungan yang tersedia untuk menjalankan aplikasi, misalnya, langsung oleh antarmuka grafis.
Ini terlihat jika, misalnya, Anda menggunakan ~/.profile, atau .bashrc, atau .zshenv(tergantung pada shell Anda) untuk memodifikasi variabel lingkungan --- seperti penambahan klasik direktori ke path.
Untuk melihat variabel lingkungan yang tersedia untuk aplikasi yang dimulai langsung di lingkungan grafik, Anda dapat melakukan hal berikut (di Gnome Shell, saya yakin ada metode yang setara di semua DE lainnya):
xterm -e bash --noprofile --norc(Atau, jika Anda tidak punya xterm, gnome-terminal -- bash --noprofile --norc--- terima kasih kepada @ Mike Nakis untuk komentarnya).
Anda sekarang memiliki terminal dengan shell yang tidak menambahkan variabel lingkungan apa pun. Anda dapat menggunakan di envsini untuk mendaftar semua variabel lingkungan Anda:

Jelas shell baru akan memiliki variabel lingkungan yang ditambahkan oleh file sistem, tetapi variabel itu harus tersedia (berdasarkan warisan) untuk semua program dalam sistem.
Saya memposting ini karena ini keempat kalinya saya harus mencari trik ini lagi, memeriksa .pam_environmentfile saya . Jadi sekarang saya akan menemukannya lebih cepat (dan dalam prosesnya, saya harap membantu orang lain ...)
xterm -e bash --noprofile --norckarena file startup tidak dibaca dan dieksekusi ketika Ubuntu dimulai dengan antarmuka grafis? Lihat askubuntu.com/q/1025845/1471
gnome-terminal -- bash --noprofile --norc
Anda dapat melihat semua variabel dengan declarebuiltin.
declare -p
Jika Anda hanya tertarik pada variabel lingkungan, gunakan
declare -xp
Jalankan help declareuntuk melihat apa opsi lainnya.
POSIXLY_CORRECT=1 setdan juga layak disebutkan bahwa declareadalah alias(dalam konteks itu) untuk typeset, builtin pesta lain.
Untuk membuat daftar variabel lingkungan di terminal dengan CTRL+ ALT+ TAnda dapat menggunakan envperintah.
sebagai contoh :
[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja
dll.
berharap itu bisa membantu.
Dalam bash menggunakan compgen:
compgen -v | while read line; do echo $line=${!line};done
compgen -v | while read line; do declare -p $line; done
Sebagian besar solusi di sini hanya mencetak variabel lingkungan saja, atau memiliki kelemahan yang env atau (set -o posix; posix) tidak mencetak nilai dalam bentuk yang dapat diuraikan (cobalah untuk mencetak variabel A = $ 'a \ r \ nb' ...) .
Berikut adalah fungsi yang akan mencetak semua variabel, satu variabel per baris, dalam bentuk POSIX escaped:
function dump_vars {
local VARNAME
compgen -v | while read -r VARNAME; do
printf "$VARNAME=%q\n" "${!VARNAME}"
done
}
Terima kasih kepada @tmgoblin untuk menunjukkan penggunaan compgen -v.
env adalah cara POSIX 7 :
export asdf=qwer
env | grep asdf
Output sampel:
asdf=qwer
Ini hanya menunjukkan variabel yang diekspor: variabel yang tidak diekspor biasanya tidak dianggap "variabel lingkungan".
Lebih suka yang berakhir printenv, yang bukan POSIX. Keduanya tampaknya melakukan hal yang sama tanpa argumen: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv
envlebih terlihat dengan pemformatan yang lebih baik, dan saya telah menambahkan lebih banyak info.
printenv hanya mencantumkan variabel yang diekspor, command+ alt+ $ ("\ e $": variabel lengkap) akan mencantumkan semua variabel.