Merujuk variabel lingkungan * di * / etc / environment?

19

Saya baru-baru ini menemukan /etc/environment, yang tampaknya cara yang lebih standar untuk mensetup variabel lingkungan yang sederhana daripada skrip, tapi saya bertanya-tanya apakah ada cara untuk merujuk kembali variabel lingkungan dalam file / etc / environment.

Yaitu, saya punya ini:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Namun, jika saya mencoba menambahkan $JAVA_HOME/bindefinisi PATH, saya mendapatkan $ JAVA_HOME / bin, dan bukan variabel yang diinterpolasi. Untuk mengatasinya, saya membuat environment.sh di profil.d untuk menambahkan /binentri ke path, tapi ini tampaknya ceroboh dan tidak terorganisir.

Apakah ada cara untuk mereferensi variabel lingkungan di / etc / environment?

Stefan Kendall
sumber

Jawaban:

13

The /etc/environmentfile yang dibaca oleh pam_envmodul PAM . Ini hanya mendukung pasangan nilai kunci sederhana, tanpa substitusi di sisi kanan.

Jika Anda ingin membangun nilainya dengan substitusi atau ekspansi shell lainnya, Anda harus melalui shell. /etc/profile(atau file dalam /etc/profile.d) adalah tempat yang tepat untuk ini. Ini adalah tempat tradisional ( /etc/environmentmerupakan inovasi yang relatif baru, dalam sejarah sistem unix), dan tentu saja tidak ada yang ceroboh dalam menggunakannya. Manfaat utama /etc/environmentadalah memungkinkan variabel lingkungan diatur bahkan dengan metode login yang tidak melibatkan shell atau untuk pengguna yang menggunakan shell non-Bourne, tetapi ini tidak umum dalam praktiknya.

Gilles
sumber
Tanpa substitusi, Anda berakhir dengan banyak redudansi /etc/environment, saya terpaksa /etc/profile, terima kasih atas saran Anda.
SAFX
2

Dokumentasi Ubuntu membuat ini tampak mustahil. TAPI, ada jawaban.

JAWABAN : Membuat variabel, lingkungan sistem lebar persisten di/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Detail:
Berikut ini beberapa detail lainnya dari dokumentasi Environment Variables .
Rekomendasi resmi adalah untuk digunakan /etc/environment, seperti yang telah Anda coba. Masalahnya adalah file ini bukan file skrip. Dengan kata lain, Anda tidak dapat menggunakan variabel dalam deklarasi variabel.

Dokumentasi dilanjutkan dengan 2 file "Tidak Disarankan" lainnya
/etc/profiledan /etc/bash.bashrc.

/etc/profile+ msgstr "lakukan sedikit lebih dari memanggil file /etc/bash.bashrc". Jadi, bukannya memilih

/etc/bash.bashrc karena "Ubuntu dikonfigurasi secara default untuk mengeksekusi file ini setiap kali pengguna memasukkan shell atau lingkungan desktop."

csi
sumber
Saya telah memperbarui EnvironmentVariables dengan berkonsultasi dengan beberapa pengembang Ubuntu, jadi pernyataan "tidak direkomendasikan" itu sudah tidak ada lagi.
Gunnar Hjalmarsson
"Setiap kali pengguna memasukkan sebuah shell". apa yang harus saya lakukan ketika tidak ada pengguna untuk memasukkan shell? Saya perlu variabel lingkungan untuk pengguna otomatis saya yang menjalankan perangkat lunak saat startup. Sebagai contoh, saya memiliki 6 baris konfigurasi proxy saja. Apa yang harus saya lakukan dengannya?
eis