Bagaimana cara membuat daftar semua nama variabel dan nilainya saat ini?
Termasuk tidak hanya $HOME
, $PWD
dll tetapi yang lain yang telah Anda tetapkan.
Bagaimana cara membuat daftar semua nama variabel dan nilainya saat ini?
Termasuk tidak hanya $HOME
, $PWD
dll 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 printenv
halaman 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 zshoptions
halaman manual .
MYNEWVARIABLE=Ubuntu
dan menjalankannya printenv
tidak muncul di sana. Mengapa begitu, dan bagaimana orang lain itu muncul?
export MYNEWVARIABLE=Ubuntu
dan akan bekerja seperti yang Anda harapkan.
set
, itu mencantumkan variabel yang dibuat oleh Anda juga. Atau lakukanset | grep myvar
printenv
adalah perintah eksternal, jadi ia hanya tahu tentang (dan mencetak) variabel lingkungan yang diekspor. set
adalah 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
printenv
atau 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 env
sini 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_environment
file saya . Jadi sekarang saya akan menemukannya lebih cepat (dan dalam prosesnya, saya harap membantu orang lain ...)
xterm -e bash --noprofile --norc
karena 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 declare
builtin.
declare -p
Jika Anda hanya tertarik pada variabel lingkungan, gunakan
declare -xp
Jalankan help declare
untuk melihat apa opsi lainnya.
POSIXLY_CORRECT=1 set
dan juga layak disebutkan bahwa declare
adalah alias
(dalam konteks itu) untuk typeset
, builtin pesta lain.
Untuk membuat daftar variabel lingkungan di terminal dengan CTRL+ ALT+ TAnda dapat menggunakan env
perintah.
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
env
lebih 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.