Setiap proses memiliki beberapa atribut yang proses dapat atur secara individual dan independen dari proses lain. Contohnya adalah batasan sumber daya, umask, direktori saat ini, variabel lingkungan dan beberapa lainnya. Setelah proses pembuatan (melalui fork()
panggilan sistem) anak mewarisi atribut ini dari orang tua. Setelah ini, proses anak dapat mengatur atribut ini secara sewenang-wenang. (Beberapa pembatasan berlaku, suatu proses mungkin tidak meningkatkan batas sumber daya keras atau mengubah direktori saat ini ke direktori yang tidak memiliki izin eksekutif.)
Hanya sedikit program yang memodifikasi variabel lingkungannya, kebanyakan tidak peduli. Misalkan kasus yang terakhir. Jadi jika proses anak menciptakan sendiri anak-anak selanjutnya, maka proses ini akan memiliki variabel lingkungan yang sama dengan kakek-nenek. Dan seterusnya.
Sekarang, shell memiliki banyak variabel yang dapat dilihat dengan set
(dalam shell dari tipe Bourne Shell, tidak tahu tentang C Shell). Variabel-variabel ini bukan variabel lingkungan kecuali mereka export
ed. Variabel lingkungan dapat dilihat dengan env
. Jika Anda meluncurkan program dari baris perintah shell, program akan mewarisi variabel lingkungan dari shell. Demikian juga untuk program yang diluncurkan dari skrip shell.
Oleh karena itu, setelah masuk ada shell yang membaca data profil (misalnya ~/.profile
) dan mewariskannya ke hampir semua anak, cucu, dan sebagainya. Ini adalah bagaimana pengaturan variabel lingkungan mengalir dari shell login atau skrip login ke semua program lain yang diluncurkan dalam sesi login.
Saya membuat variabel lingkungan di satu jendela terminal dan mencoba untuk mengulanginya di jendela terminal lain. Itu tidak menunjukkan apa-apa.
Dengan penjelasan di atas, inilah hasil yang diharapkan. Perubahan dalam lingkungan suatu proses hanya memengaruhi anak-anak dari proses ini yang dibuat untuk selanjutnya, bukan yang sudah ada.
$TEST=hello
Ini tidak mungkin berhasil, kecuali ekspansi variabel dinonaktifkan atau $TEST
sudah memiliki nilai yang sesuai. Jika Anda ingin menetapkan hello
ke variabel TEST
maka Anda harus mengatakan TEST=hello
(catatan: tidak $
).
Setelah itu saya mengekspornya dan mencoba lagi echo
di jendela terminal yang berbeda. hasilnya sama seperti sebelumnya.
Sekali lagi, ini adalah hasil yang diharapkan.
tetapi jika saya menjalankan kode yang sama pada saat login (menambahkan kode ke ~/.profile
file) variabel dapat digunakan jendela terminal apa pun.
Ini karena shell di terminal adalah turunan dari shell yang membaca pengaturan lingkungan dari ~/.profile
dan dengan demikian mewarisi pengaturan ini.