Bagaimana cara menambahkan variabel lingkungan?

365

Saya menjalankan Ubuntu 11.04. Saya menggunakan terminal untuk memulai sesi bash, dan saya ingin menambahkan variabel lingkungan:

$r@hajt:~$ env THEVAR=/example

Tapi itu tidak berhasil. Ini menunjukkan semua variabel dengan THEVAR menjadi yang terakhir, tetapi panggilan lain untuk envtidak menunjukkan THEVARlagi- env | grep THEVARtidak menghasilkan apa-apa.

Demikian pula, skrip dengan ekspor ( export THEVAR=/example) atau penugasan variabel lainnya ( THEVAR=/example) tidak menambahkan variabel lingkungan.

Saya tahu saya melakukan sesuatu yang salah, saya tahu itu harus sesuatu yang sederhana, tetapi saya tidak dapat menemukan apa.

UPDATE: Arti sebenarnya dari pertanyaan saya adalah ini: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Pokoknya saya akan memilih jawaban yang paling banyak dipilih dan meninggalkan judul yang diedit - itu bukan yang saya minta)

env menjalankan program di lingkungan yang dimodifikasi, lalu menolak semua perubahan.

hah
sumber
1
Ketika didefinisikan / diekspor dalam .bashrc, itu berfungsi dengan baik.
Huff
1
Bagaimana dengan THEVAR=/example?
Oleh Prypin
2
Yang lainnya adalah tentang variabel global, yang ini tidak menambahkan batasan seperti itu. Saya akan memisahkannya.
Lekensteyn

Jawaban:

571

Untuk mengatur variabel hanya untuk shell saat ini:

VARNAME="my value"

Untuk mengaturnya untuk shell saat ini dan semua proses dimulai dari shell saat ini:

export VARNAME="my value"      # shorter, less portable version

Untuk mengaturnya secara permanen untuk semua sesi pesta di masa yang akan datang tambahkan baris tersebut ke .bashrcfile Anda di $HOMEdirektori Anda .

Untuk mengaturnya secara permanen, dan lebar sistem (semua pengguna, semua proses) menambahkan variabel set di / etc / environment:

sudo -H gedit /etc/environment

File ini hanya menerima tugas variabel seperti:

VARNAME="my value"

Jangan gunakan exportkata kunci di sini.

Anda harus keluar dari pengguna saat ini dan masuk lagi agar perubahan variabel lingkungan terjadi.

Michał Šrajer
sumber
29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
SudoSURoot
1
@ Mr.Hyde ya, itu mungkin tempat yang masuk akal
Michał Šrajer
1
@BharadwajRaju karena pada beberapa sistem UNIX lama orang hanya dapat mengekspor variabel yang sudah ditetapkan. Solaris lama dan HP-UX misalnya.
Michał Šrajer
1
Setelah Anda mengatur variabel lingkungan, bagaimana saya bisa dengan cepat melihatnya untuk memastikan itu diatur?
Rod
1
@Rodecho $myvar
Qwerty
29

Untuk mengatur variabel lingkungan sekali, gunakan exportperintah di prompt, bukan di skrip shell:

$ export THEVAR=/example

Variabel akan ditetapkan untuk sisa sesi shell atau sampai tidak disetel.

Untuk mengatur variabel lingkungan setiap kali, gunakan exportperintah dalam .bashrcfile (atau file inisialisasi yang sesuai untuk shell Anda).

Untuk mengatur variabel lingkungan dari skrip, gunakan exportperintah dalam skrip, dan kemudian sourceskrip. Jika Anda menjalankan skrip itu tidak akan berfungsi.

Untuk penjelasan tentang perbedaan antara sumber dan pelaksana lihat jawaban ini: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- bash-script / 176788 # 176788

lesmana
sumber
4
Bagaimana saya bisa membuatnya bekerja hanya dengan menjalankan skrip? Tanpa sumber.
Mithril
19

Untuk secara permanen menambahkan variabel lingkungan baru di Ubuntu (hanya diuji pada 14.04), gunakan langkah-langkah berikut:

  1. Buka terminal (dengan menekan CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Ketikkan kata sandi Anda
  4. Edit file teks yang baru saja dibuka:
    mis. Jika Anda ingin menambahkan FOO=bar, maka cukup tulis FOO=bardi baris baru
  5. Simpan itu
  6. Setelah disimpan, keluar dan masuk lagi.
  7. Perubahan yang diperlukan Anda dilakukan.
pengguna355501
sumber
5
Saya telah membersihkan jawaban Anda dengan menghapus bit yang lebih berbahaya tentang sudo gedit(Lihat askubuntu.com/questions/270006/… ) dan chmod 777. Yang terakhir tidak boleh dilakukan pada file konfigurasi sistem.
muru
Ini jawaban yang benar untuk kasus-kasus tertentu. Semua sesi, apakah sesi shell pengguna atau tidak akan mendapatkan nilai variabel yang ditetapkan di sini. Penting untuk dicatat bahwa walaupun ini terlihat seperti skrip shell, namun tidak - skrip ini memungkinkan Anda hanya mengatur variabel lingkungan (vs. menggunakan fungsi-fungsi shell seperti ifatau test)
Tom Harrison Jr
Jika bilah adalah string, haruskah saya meletakkannya di antara tanda kutip? Suka Foo="bar"?
blue_chip
@blue_chip Tidak, berfungsi tanpa tanda kutip.
Klik Suara
4
@blue_chip untuk variabel lingkungan, semuanya adalah string. Anda hanya perlu mengutip ketika itu berisi spasi.
Ruslan
8

Untuk mendapatkan perubahan lingkungan / var bertahan setelah skrip selesai, Anda harus menggunakan source ./script.shatau notasi singkatan untuk sumber, ".", Seperti. ./script.sh

Sumber akan menjalankan perintah dalam skrip seolah-olah Anda telah mengetiknya ... jadi itu mengubah beberapa aspek skrip, seperti keluar ... jadi jika skrip Anda memeriksa sesuatu dan memutuskan untuk keluar jika salah, misalnya, melalui panggilan exit 0, itu akan mengakhiri sesi terminal / shell Anda saat ini.

m0bl
sumber
Ini adalah pertanyaan yang sangat lama yang sudah memiliki jawaban yang dapat diterima dan beberapa lainnya ... Pertimbangkan, menjawab pertanyaan yang lebih baru tolong ...
NerdOfCode
3
@ NerdOfCode jawaban ini membahas masalah yang masih relevan dan tidak ada jawaban lain, termasuk yang diterima, sebutkan, sejauh yang saya bisa lihat ... Sebenarnya ada dua lencana yang tersedia untuk memberikan jawaban yang baik untuk pertanyaan lama, jadi ini dianjurkan
Zanna
1
Ini persis apa yang saya cari. Saya perlu melihat keluar dari skrip, variabel yang diekspor dari skrip.
albanx
5

Jika Anda melakukan sesuatu melalui skrip, satu cara mudah untuk mengatur variabel lingkungan secara permanen adalah dengan menuliskan pernyataan di bawah ini dalam skrip Anda,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Jika Anda perlu mengevaluasi ekspresi seperti pwd, Anda dapat menggunakan ini, misalnya,

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc
Shital Shah
sumber
1

Saya tahu ini agak terlambat, tetapi jika Anda ingin menambahkan variabel lingkungan untuk semua pengguna (misalnya penggunaan JAVA) - Anda dapat melakukan hal berikut:

1) Buka /etc/bash.bashrcmenggunakan nano (Anda dapat menggunakan editor apa pun, saya tidak suka VIM karena ini adalah yang terburuk dalam hal keramahan pengguna - bukan masalah pribadi).

2) Tambahkan ke file:

export VAR=path export PATH=$PATH:/bin 3) (Lebih baik jika Anda dapat memantulkan kotak) - atau cukup buka sesi SSH baru dan konfirmasikan menggunakan perintah `env '.

TETAPI JIKA Anda ingin setiap pengguna memiliki pengaturan terpisah untuk ini, Anda harus membuat perubahan (dituliskan) ke .bashrcfile di bawah ~/.bashrc(atau /home/$USER/jika Anda baru mengenal sistem Linux)

ha9u63ar
sumber