Apa tujuan PATH?
Begitulah shell Anda menemukan program. Ketika Anda mengetik ls
, misalnya, menjalankan program yang disebut ls
yang hidup di /bin
sebagian besar sistem, termasuk Mac OS X. Shell Anda hanya dapat menemukan itu karena /bin
ada di dalam PATH
.
Shell mencari program secara PATH
berurutan, dari kiri ke kanan. Jika ada dua ls
program di sistem Anda, dan direktori mereka ada di Anda PATH
, ia akan menemukan satu di direktori yang terdaftar pertama di komputer Anda PATH
.
Apa perbedaan antara / etc / paths dan ~ / .bash_profile
Jalur yang ditetapkan /etc/paths
ditambahkan ke PATH
saat startup di semua shell di Mac OS X.
~/.bash_profile
hanyalah salah satu dari beberapa skrip shell yang dijalankan oleh Bash saat startup, dan beberapa di antaranya khusus untuk Bash. Karena itu, jika Anda mengganti shell Anda - Mac OS X juga dikirimkan tcsh
dan zsh
, misalnya - perubahan yang dibuat /etc/bashrc
tidak berlaku untuk shell baru Anda.
Juga, /etc/paths
adalah file konfigurasi tingkat sistem, sementara ~/.bash_profile
per pengguna. Jika Anda mengatur beberapa pengguna interaktif di Mac, Anda tidak ingin menambahkan direktori /etc/paths
yang tidak ingin Anda tampilkan di semua orang PATH
. Hal yang sama berlaku untuk /etc/bashrc
, kecuali tentu saja itu hanya berlaku untuk pengguna yang menggunakan Bash sebagai shell mereka.
Apa perbedaan antara PATH dan $ PATH dan $ {PATH}?
Anda biasanya hanya melihat variabel tanpa sigil ketika Anda mengatur variabel. FOO=bar
set FOO
variabel lingkungan ke string bar
. Jika Anda mengetik set
, shell menampilkan semua variabel lingkungan, dan dalam hal ini Anda juga melihat variabel tersebut tanpa sigil.
$PATH
dan ${PATH}
biasanya dipertukarkan. Mereka memberi tahu shell untuk memperluas nilai PATH
variabel saat ini di tempat. Perbedaannya ada hubungannya dengan bagaimana dan di mana Anda menggunakannya. Sebagai contoh:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
Pada echo
perintah kedua , shell tidak mencetak apa-apa karena ia meminta shell untuk mencetak variabel yang dipanggil FOOx
, yang tidak ada; shell memperlakukan variabel yang tidak ada sebagai kosong. Karena yang ketiga echo
menggunakan sintaks kurawal, itu memungkinkan shell untuk melihat bahwa Anda meminta FOO
variabel, dan bahwa x
itu hanyalah karakter lain yang ingin Anda cetak segera sesudahnya.
Ada cara lain untuk mendapatkan efek yang sama tanpa kurung kurawal:
$ echo "$FOO"x
barx
Variabel lingkungan diperluas dalam tanda kutip ganda, dan tanda kutip memisahkan x
variabel dari ekspansi variabel sehingga shell melakukan hal yang benar.
Saya menggunakan FOO
variabel lingkungan di sini hanya untuk kejelasan. Semua yang saya tulis di atas berlaku juga untuk PATH
, karena itu hanya variabel lingkungan lainnya. Contoh teks akan jauh lebih lama.
Apa artinya ekspor PATH? Kapan kita mengekspor?
Mengambil FOO
contoh di atas , jika Anda menjalankan program lain, itu tidak akan melihat FOO
variabel karena tidak diekspor. Ia hanya hidup dalam satu instance shell:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Ketika saya pertama kali menjalankan bash
shell baru di bawah yang sudah saya gunakan, kemudian mencoba menunjukkan nilainya FOO
, saya mendapatkan kosong karena FOO
tidak diekspor untuk melihat sub-program. Lalu saya keluar dari bash
instance kedua , mengekspornya, berlari bash
lagi, dan sekarang instance kedua melihat nilai FOO
.
Anda menggunakan export
ketika Anda ingin sub-program untuk melihat nilai-nilai yang ditetapkan di shell, dan tidak menggunakannya ketika Anda tidak ingin itu terjadi.
Biasanya, saya tidak mengekspor variabel sementara dalam skrip shell, karena saya tidak ingin mereka mengubah cara program berjalan dari skrip shell tersebut.
Saya tidak akan menjawab pertanyaan Anda yang lain. Anda seharusnya hanya bertanya satu per satu. Saya hanya menjawab sebanyak ini karena mereka berhubungan samar-samar. Segala sesuatu yang lain termasuk dalam pertanyaan terpisah.