perbedaan antara file bash.bashrc dan / etc / environment

42

Hingga saat ini saya digunakan untuk mengatur variabel lingkungan saya di bash.bashrcfile. Baru-baru ini saya disuruh menggunakan /etc/environmentfile tersebut. Keduanya bekerja dengan baik.

Jadi, apa perbedaan di antara mereka?

Saya mencari ini di Google dan saya menemukan "bashrc digunakan untuk lingkungan dan pengguna tertentu, sistem luas". Apa yang dimaksud dengan sistem lebar di sini? /etc/bash.bashrcSaya juga menerapkan perubahan sistem yang luas. Koreksi saya jika saya salah. Segala jenis bantuan akan dihargai ..

perangkap
sumber

Jawaban:

35

Satu perbedaan adalah yang /etc/environmenthanya berisi definisi variabel dan tampaknya tidak melalui ekspansi / interpolasi variabel apa pun. Dengan demikian, Anda tidak dapat merujuk variabel dalam definisi. Ini misalnya tidak akan berfungsi:

A="else"
B="something $A"

B benar-benar akan something $A, bukan yang diharapkan something else.

Lihat pertanyaan ini .

Ngomong-ngomong, jawaban yang Anda temukan melalui Google tampaknya merujuk pada pengguna ~/.bashrc, bukan pada seluruh sistem /etc/bash.bashrc. Itu mungkin menyebabkan kebingungan Anda.

roadmr
sumber
apa tujuan dari ~ / .bashrc ketika ada dua file yang melakukan hal yang sama / etc / environment dan /etc/bash.bashrc?
trapaank
6
/Etc/bash.bashrc dieksekusi jika ada pengguna yang membuka bash. ~ / .Bashrc hanya dijalankan jika pemilik direktori home tempat ia disimpan membuka sebuah bash.
André Stannek
18

The /etc/environmentberkas menetapkan variabel sistem yang luas untuk setiap pengguna pada boot. Perintah di dalam /etc/bash.bashrcdieksekusi jika bashshell dibuka oleh pengguna mana pun. Jadi variabel tidak akan diatur kecuali bashshell dibuka setidaknya satu kali.

André Stannek
sumber
Maaf saya pemula di linux. whe bash shell akan dibuka? dan hal lain ketika bash shell dibuka akankah ia menimpa variabel yang diset di / etc / enviornment atau tidak?
trapaank
Saya tidak yakin kapan / etc / environment dijalankan dengan tepat tetapi /etc/bash.bashrc dieksekusi oleh Ubuntu saat Anda memasuki lingkungan desktop Anda. Itu sebabnya ia bekerja jika Anda mengatur variabel di sana. Dugaan saya adalah bahwa / etc / environment dijalankan sekali saat booting sebelum Anda masuk ke desktop Anda dan bahwa eksekusi dari /etc/bash.bashrc menimpa variabel. Tetapi sekali lagi: Saya tidak yakin tentang ini.
André Stannek
4
Ini saat masuk, bukan boot!
slm
6

Dan ketika Anda bertanya tentang " sistem ":

File konfigurasi yang terletak di /etcdirektori berlaku untuk semua pengguna di sistem. Untuk /etc/bash.bashrcini akan berarti untuk semua dan semua yang menggunakan "Borne Again SHell" alias Bash pada mesin itu. Bahkan jika Anda satu-satunya manusia yang menggunakannya, mungkin ada "pengguna teknis" yang terpengaruh (lihat saja /etc/passwddan periksa seberapa sering istilah "/ bin / bash" dinyatakan di sana - atau gunakan grep bash /etc/passwd | wc -l, yang seharusnya memberi Anda angka itu secara langsung (artinya: "ambil" semua baris yang berisi string "bash" dari file "/ etc / passwd", dan kirim hasilnya ("|") ke perintah "wc" (jumlah kata) untuk menghitung baris ("-l").

Jadi untuk pengguna Anda, lebih aman untuk memodifikasi ~/.bashrcsaja (artinya file ".bashrc" - dengan titik terkemuka, ya - di direktori home Anda, misalnya /home/ankur/.bashrc), yang kemudian hanya mempengaruhi pengguna Anda dan meninggalkan yang lainnya sendirian. . File dalam /etcseharusnya hanya diubah jika perubahan seluruh sistem benar-benar dimaksudkan.

Selain itu: Kedua konfigurasi akan digunakan jika ada. Pertama, file sistem-lebar (di sini /etc/bash.bashrc:) dibaca dan "bersumber" (pengaturannya diterapkan pada sesi saat ini), dan kemudian pengguna /home/username/.bashrcditangani sama, dan dengan demikian dapat menambah atau bahkan mengubah / menimpa pengaturan dari global /etc/bash.bashrcmengajukan.

Izzy
sumber
3

Di luar diskusi sistem dan lingkup pengguna, satu perbedaan yang paling signifikan /etc/environmentadalah bukan skrip ~/.bashrc.

Anda tidak dapat /etc/environmentmengubah variabel di dalam , penugasan variabelnya yang mengambil nilai garis secara harfiah (seperti yang telah disebutkan oleh roadmr).

Ubuntu Anda akan mengunci Anda jika Anda mengacaukan bagian $PATHdalamnya /etc/environmentdengan mencoba menambahkan jalur baru

PATH=$PATH:/new_path

Jika halaman login Ubuntu Gnome atau Unity Anda gagal membiarkan Anda masuk tanpa mengeluh kata sandi yang salah. Dan Anda baru saja dimodifikasi /etc/environment, kemungkinan besar terjadi.

Cara mengatasinya adalah dengan masuk ke konsol virtual CTRL+ ALT+ F1masuk konsol, memeriksa secara manual $PATH, dan memperbaiki /etc/environmentfile.

Menurut ini , /etc/environmentdimuat oleh tumpukan PAM, yang mengisi variabel lingkungan baris demi baris.

legendbb
sumber
-1

Perbedaan antara keduanya adalah bahwa /etc/enivironmentfile tersebut akan berfungsi untuk semua pengguna sedangkan file bash.bashrc akan bekerja hanya untuk pengguna itu saja. Dan jika Anda melakukan kesalahan pada /etc/environmentfile maka konsekuensinya mungkin parah sementara Anda dapat dengan mudah membatalkan perubahan pada file bash.bashrc dengan menyalin isi file / etc / environment. Tetapi preferensi pertama adalah memberikan ke bash.bashrcfile dan kemudian ke / etc / file environment. Bukannya jika Anda membuat perubahan pada bash.bashrcfile maka terminal akan memberikan preferensi pertama ke file pengguna lokal (yaitu, bash.bashrc) dan kemudian ke file utama (yaitu, /etc/environment).

Pranit Bauva
sumber
Saya pikir Anda membingungkan ~ / .bashrc dan /etc/bash.bashrc file. Yang pertama adalah lokal untuk pengguna yang membuka shell, yang kedua adalah global untuk semua pengguna yang membuka shell.
Dennis