Pertanyaan Bagaimana saya menambahkan variabel lingkungan?


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 env tidak muncul THEVAR lagi- env | grep THEVAR tidak menghasilkan apa-apa.

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

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

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

(Pokoknya saya akan memilih jawaban yang paling memberikan suara dan meninggalkan judul yang diedit - bukan itu yang saya tanyakan)

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


224
2017-08-27 00:22


asal


Ketika didefinisikan / diekspor dalam .bashrc, ia bekerja dengan baik. - huff
kemungkinan duplikat dari Google Earth dan variabel lingkungan $ BROWSER - Isaiah
Bagaimana tentang THEVAR=/example? - Oleh Prypin
Yang lain adalah tentang variabel global, yang satu ini tidak menambah batasan seperti itu. Saya akan memisahkannya. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


Jawaban:


Untuk mengatur variabel hanya untuk shell saat ini:

VARNAME="my value"

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

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

Untuk mengaturnya secara permanen untuk semua sesi bash masa depan tambahkan baris tersebut ke Anda .bashrc file di Anda $HOME direktori.

Untuk mengaturnya secara permanen, dan sistem yang luas (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 export kata kunci di sini.

Anda perlu keluar dari pengguna saat ini dan masuk lagi sehingga perubahan variabel lingkungan terjadi.


363
2017-08-27 07:50



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
Di mana saya harus menambahkan baris khusus saya? bagian bawah .bashrc page ?! - Mr.Hyde
@ Mr.Hyde ya, itu mungkin tempat yang masuk akal - Michał Šrajer
Mengapa yang kedua kurang portabel? - UniversallyUniqueID
@BharadwajRaju karena pada sistem UNIX lama seseorang hanya dapat mengekspor variabel yang sudah ditetapkan. Old Solaris dan HP-UX misalnya. - Michał Šrajer


Untuk mengatur variabel lingkungan sekali, gunakan export perintah dalam prompt, bukan dalam skrip shell:

$ export THEVAR=/example

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

Untuk menetapkan variabel lingkungan setiap kali, gunakan export perintah di .bashrc file (atau file inisialisasi yang sesuai untuk shell Anda).

Untuk mengatur variabel lingkungan dari skrip, gunakan export perintah di skrip, dan kemudian source naskah. Jika Anda menjalankan skrip itu tidak akan berhasil.

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


21
2017-08-27 07:20



Bagaimana saya bisa membuatnya bekerja hanya dengan mengeksekusi skrip? Tanpa sumber. - Mithril


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:
    misalnya jika Anda ingin menambahkan FOO=bar, kemudian tulis saja FOO=bar di baris baru
  5. Simpan itu
  6. Setelah disimpan, keluar dan masuk lagi.
  7. Perubahan yang Anda minta dibuat.

15
2017-12-07 08:45



Saya telah membersihkan jawaban Anda dengan menghapus bagian yang lebih berbahaya sudo gedit (Lihat askubuntu.com/questions/270006/…) dan chmod 777. Yang terakhir tidak boleh dilakukan pada file konfigurasi sistem. - muru
Ini adalah 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 sementara ini mungkin terlihat seperti skrip shell, itu tidak - itu memungkinkan Anda hanya untuk mengatur variabel lingkungan (vs menggunakan fungsi shell seperti if atau test) - Tom Harrison Jr
Jika bar adalah string, haruskah saya meletakkannya di antara tanda kutip? Seperti Foo="bar"? - blue_chip
@blue_chip Tidak, berfungsi tanpa tanda kutip. - Click Upvote
@blue_chip untuk variabel lingkungan, semuanya adalah string. Anda hanya membutuhkan tanda kutip saat berisi spasi. - Ruslan


Untuk mendapatkan perubahan lingkungan / var agar tetap ada setelah skrip selesai, Anda harus menggunakannyasource ./script.sh atau notasi singkat untuk sumber, ".", suka . ./script.sh

Sumber akan mengeksekusi perintah di skrip seolah-olah Anda mengetiknya di ... sehingga 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.


3
2018-03-16 15:09



Ini adalah pertanyaan yang sangat lama yang sudah memiliki jawaban yang diterima dan beberapa lainnya ... Pertimbangkan, jawab pertanyaan yang lebih baru, silakan ... - NerdOfCode
@NerdOfCode jawaban ini membahas masalah yang ada masih relevan dan tidak ada jawaban lain, termasuk yang diterima, menyebutkannya, sejauh yang saya bisa lihat ... Sebenarnya ada dua lencana tersedia untuk memberikan jawaban yang baik untuk pertanyaan lama, jadi ini dianjurkan - Zanna


Jika Anda melakukan hal-hal melalui skrip, satu cara mudah untuk mengatur variabel lingkungan secara permanen diletakkan di bawah pernyataan 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

1
2017-07-12 02:06