Apa tujuan PATH?
Begitulah shell Anda menemukan program. Ketika Anda mengetik ls, misalnya, menjalankan program yang disebut lsyang hidup di /binsebagian besar sistem, termasuk Mac OS X. Shell Anda hanya dapat menemukan itu karena /binada di dalam PATH.
Shell mencari program secara PATHberurutan, dari kiri ke kanan. Jika ada dua lsprogram 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/pathsditambahkan ke PATHsaat startup di semua shell di Mac OS X.
~/.bash_profilehanyalah 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 tcshdan zsh, misalnya - perubahan yang dibuat /etc/bashrctidak berlaku untuk shell baru Anda.
Juga, /etc/pathsadalah file konfigurasi tingkat sistem, sementara ~/.bash_profileper pengguna. Jika Anda mengatur beberapa pengguna interaktif di Mac, Anda tidak ingin menambahkan direktori /etc/pathsyang 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=barset FOOvariabel lingkungan ke string bar. Jika Anda mengetik set, shell menampilkan semua variabel lingkungan, dan dalam hal ini Anda juga melihat variabel tersebut tanpa sigil.
$PATHdan ${PATH}biasanya dipertukarkan. Mereka memberi tahu shell untuk memperluas nilai PATHvariabel 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 echoperintah 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 echomenggunakan sintaks kurawal, itu memungkinkan shell untuk melihat bahwa Anda meminta FOOvariabel, dan bahwa xitu 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 xvariabel dari ekspansi variabel sehingga shell melakukan hal yang benar.
Saya menggunakan FOOvariabel 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 FOOcontoh di atas , jika Anda menjalankan program lain, itu tidak akan melihat FOOvariabel 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 bashshell baru di bawah yang sudah saya gunakan, kemudian mencoba menunjukkan nilainya FOO, saya mendapatkan kosong karena FOOtidak diekspor untuk melihat sub-program. Lalu saya keluar dari bashinstance kedua , mengekspornya, berlari bashlagi, dan sekarang instance kedua melihat nilai FOO.
Anda menggunakan exportketika 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.