Jawaban ini membutuhkan beberapa pengalaman dan pengetahuan skrip shell dengan variabel istilah, nilai, penggantian variabel, prompt, echo, kernel, shell, utilitas, sesi dan proses.
Sebuah variabel lingkungan (envar) adalah satu set variabel yang didefinisikan global yang dapat mempengaruhi cara proses tertentu akan berperilaku pada sistem operasi komputer.
1. Pengantar teladan:
Kami mengganti utusan dengan huruf a $
dan huruf kapital . Sebagai contoh: $PS1
.
Kami dapat mencetak envar dengan cara ini:
echo $PS1
$PS1
memegang nilai prompt Unix. Katakanlah nilai asalnya \u
\w
$
.
\u
singkatan dari pengguna (saat ini),
\w
singkatan direktori kerja,
$
adalah untuk membatasi prompt.
Jadi, jika kita lakukan:, echo $PS1
kita melihat nilai-nilai \u
, \w
ditambah tanda dolar pada akhirnya.
Kita bisa mengubah perilaku Unix dalam konteks itu, jika kita mengubah nilai envar itu. Sebagai contoh:
PS1="\w >"
Sekarang prompt tampak seperti ini (dengan asumsi direktori kerja bernama "John"):
John >
Dengan cara yang sama yang bisa kita lakukan PS1="Hello, I'm your prompt >"
, maka echo $PS1
akan membawa:
Hello, I'm your prompt >
Di Bash 4.xx, kita bisa mencetak SEMUA envars di sistem dengan env
perintah. Saya sarankan mengeksekusi env
di terminal dan melihat outputnya.
2. Bagaimana data ini ditampilkan dan dimanipulasi:
Terminal sesi mari kita untuk menyesuaikan envars yang datang dengan Bash.
Perubahan yang disebutkan di atas biasanya bersifat sementara, dan inilah alasannya:
Setiap sesi (yang bukan merupakan sub-sesi) adalah unik, dan beberapa proses dapat berjalan secara unik pada waktu yang sama (masing-masing dengan set envars sendiri) tetapi biasanya ada warisan dari sesi 0 hingga sesi 1 dan ke atas.
Perubahan yang kami buat pada satu proses adalah unik untuknya, dan akan berhenti jika kami menutupnya tanpa menyimpannya dengan cara tertentu.
Jadi bagaimana kita menyimpan perubahan ini:
Ada beberapa jenis cara yang tersedia untuk menyimpan perubahan envar, tergantung pada ruang lingkup yang kami pilih. Berikut ini cakupan (level) yang berbeda untuk perubahan tersebut:
- Level proses: Envars hanya tersedia untuk program di sesi saat ini.
- Tingkat ekspor: The envars yang tersedia untuk program dalam sesi saat ini, atau semua yang sub-sesi.
- Tingkat global: Perubahan akan disimpan untuk semua sesi apa pun (primer dan semua subs).
Di mana data envar disimpan:
Unix dibangun dari 3 lapisan utama: Kernel, shell, dan utilitas. AFAIK setiap shell memiliki envars sendiri, dan ini dibangun terutama atau secara eksklusif di shell.
Lokasi spesifik untuk mengubahnya secara global biasanya /etc/profile
meskipun kita juga bisa melakukannya .bashrc
tentunya.
3. Membuat envars baru:
Kita dapat membuat envars baru dan inilah caranya; pada Bash 4.xx tidak ada nama asli enavar MESSAGE
(seperti yang dikatakan, para envars biasanya ditulis dalam huruf besar).
MESSAGE="Hello world!"
akan membuatnya untuk kita, dan sekarang jika kita mengetik gema $MESSAGE
, kita dapatkan hello world!
.
Jika kami akan mengeksekusi bash
di sesi kerja kami saat ini (jendela), kami akan memulai sub-sesi bash baru dan tidak akan lagi bekerja dalam proses asli, kecuali kami mengeksekusi exit
.
Catatan: Dalam sistem operasi dengan emulator terminal (seperti desktop Ubuntu), sub-sesi biasanya berjalan di jendela yang sama, tetapi sesi baru di jendela lain bukanlah sub-sesi dari yang sudah ada (ini adalah proses yang berdekatan ) .
Catatan: Jangan gunakan tanda khusus dalam nilai envar seperti! atau mereka tidak akan diselamatkan.
Mengekspor envar dari sesi awal ke semua sub-sesi:
Kita masih dapat menggunakan envar yang dibuat di sesi pertama, di sesi kedua juga, tanpa mendaftarkannya di file konfigurasi pengguna atau tingkat global (lihat data berikut). Berikut cara melakukannya:
Buka sesi asli (apakah pada jendela saat ini atau yang lain) dan jalankan:
export MESSAGE
saat mengekspor, jangan gunakan $
tanda.
Sekarang diekspor ke semua sub-sesi. Jika Anda akan melakukannya echo $MESSAGE
pada sub-sesi, apakah dari pengguna Anda atau yang lain, maka akan dicetak.
Perhatikan bahwa variabel internal Shell seperti PS1
tidak boleh diekspor, tetapi jika Anda ingin mengekspornya dari alasan apa pun dan tidak muncul, jangan jalankan bash
setelahnya export
, tetapi lakukan bash –norc
.
4. The $ PATH envar:
$PATH
adalah envar yang paling sering diubah pengguna.
Jika kita echo $PATH
, kita akan melihat aliran ini:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Nilai cetakan envar ini dipisahkan oleh titik dua (:) di sana, tapi di sini ada cara yang berpotensi lebih nyaman (ini adalah nilai yang sama ):
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
Ini adalah direcotries untuk mencari, ketika kita menjalankan utilitas.
Dengan mengeksekusi which echo
kita akan mendapatkan lokasi file - misalnya, kita mungkin melihatnya ada di /bin/echo
.
Berdasarkan itu kita tidak perlu mengetikkan echo envar untuk melihat nilai evnar. Kami juga dapat melakukan:
/bin/echo $ENVAR
Envar masih akan dieksekusi, misalnya:
/bin/echo $HOME
Memberi kita
/home/User || /root
Sama seperti:
echo $HOME
Memberi kita
/home/User || /root
Catatan: $HOME
disingkat ~
.
System- $ PATH relations, dan kemungkinan interaksi pengguna:
Dalam Bash 4.xx, ketika kita menggunakan utilitas tanpa path lengkapnya, sistem akan menggunakan semua 6 nilai yang disebutkan di atas, dari $PATH
envar. Jadi, itu akan mulai dari /user/local/bin
, dan akan mengikuti semua kontennya mencari yang echo
dapat dieksekusi.
Dalam hal ini, itu akan berhenti di /bin/echo
, di mana, dalam hal ini, executable berada.
Oleh karena itu, alasan utama kita dapat menyesuaikan $PATH
envar, adalah menginstal executable yang tidak berada di bawah nilai asalnya.
Setelah menginstal executable tersebut, kita harus menetapkan $PATH
nilainya sesuai dan kemudian kita akan dapat bekerja dengannya.
5. Lampiran - berkembang $PATH
:
Kita dapat export $PATH
mem-bash sub-sesi (yang mencakup ekstensi bash seperti WP-CLI untuk WordPress atau Drush untuk Drupal) dengan cara ini:
export PATH="/home/John:$PATH"
Ini akan menambahkan nilai baru /home/John
ke $PATH
, dan kemudian setelah itu, itu akan melampirkan nilai-nilai asli padanya (tepat setelah titik dua), yang disimpan di bawah sintaks $PATH
.
Perubahan permanen tersebut dapat dilakukan dalam skrip yang relevan, biasanya /etc/profile
dengan nama .bashrc
.
exec(3)
keluarga (yaitu mereka yang tidak cocok dengan eksekutif * v) lulus ** lingkungan di bawah selimut.