Apa yang ada PATH
di Mac OS? Saya telah menggunakannya untuk menginstal alat baris perintah global, tetapi satu-satunya dokumentasi yang saya temukan adalah tutorial untuk melakukan hal itu, tanpa penjelasan nyata tentang apa yang terjadi di bawah tenda. Saya juga belum menemukan halaman yang relevan di Wikipedia .
Jadi apa tujuan PATH
dan apa perbedaan antara /etc/paths
dan ~/.bash_profile
**?
Misalnya, dalam paths
file saya , saya melihat ini:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Tapi di saya ~/.bash_profile
, saya melihat ini:
# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH
Apakah ini hanya tambahan khusus untuk paths
file? Apa semua hal di paths
, seperti /usr/bin
?
Jawaban:
1. Apa tujuan PATH?
PATH
adalah variabel lingkungan yang berisi daftar direktori yang dipisahkan oleh titik dua di mana shell Anda akan mencari executable yang Anda beri nama pada baris perintah tanpa memberikan jalur eksplisit kepada mereka (seperti dalamjsdoc
contoh Anda ). Jadi, jikaPATH
sudahmaka setiap executable yang Anda panggil dengan nama akan dicari di direktori ini (dalam urutan itu) dan executable pertama yang ditemukan adalah yang dieksekusi.
2. Apa perbedaan antara / etc / paths dan ~ / .bash_profile
Menurut pertanyaan ini pada ServerFault ,
/etc/paths
digunakan untuk mengaturPATH
secara global (yaitu seluruh sistem, untuk semua pengguna) sementara~/.bash_profile
digunakan untuk mengatur preferensi per-pengguna (di mana~
akan menjadi direktori home pengguna). Apa yang ditulis.bash_profile
dapat menambah globalPATH
dari/etc/paths
atau menimpanya sepenuhnya.Sebagai catatan,
/etc/paths
tampaknya merupakan kekhasan MAC OS: Saya belum pernah menemukannya di GNU / Linux, setidaknya.sumber
/etc/paths
OSX.Begitulah shell Anda menemukan program. Ketika Anda mengetik
ls
, misalnya, menjalankan program yang disebutls
yang hidup di/bin
sebagian besar sistem, termasuk Mac OS X. Shell Anda hanya dapat menemukan itu karena/bin
ada di dalamPATH
.Shell mencari program secara
PATH
berurutan, dari kiri ke kanan. Jika ada duals
program di sistem Anda, dan direktori mereka ada di AndaPATH
, ia akan menemukan satu di direktori yang terdaftar pertama di komputer AndaPATH
.Jalur yang ditetapkan
/etc/paths
ditambahkan kePATH
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 dikirimkantcsh
danzsh
, 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 orangPATH
. Hal yang sama berlaku untuk/etc/bashrc
, kecuali tentu saja itu hanya berlaku untuk pengguna yang menggunakan Bash sebagai shell mereka.Anda biasanya hanya melihat variabel tanpa sigil ketika Anda mengatur variabel.
FOO=bar
setFOO
variabel lingkungan ke stringbar
. Jika Anda mengetikset
, 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 nilaiPATH
variabel saat ini di tempat. Perbedaannya ada hubungannya dengan bagaimana dan di mana Anda menggunakannya. Sebagai contoh:Pada
echo
perintah kedua , shell tidak mencetak apa-apa karena ia meminta shell untuk mencetak variabel yang dipanggilFOOx
, yang tidak ada; shell memperlakukan variabel yang tidak ada sebagai kosong. Karena yang ketigaecho
menggunakan sintaks kurawal, itu memungkinkan shell untuk melihat bahwa Anda memintaFOO
variabel, dan bahwax
itu hanyalah karakter lain yang ingin Anda cetak segera sesudahnya.Ada cara lain untuk mendapatkan efek yang sama tanpa kurung kurawal:
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 untukPATH
, karena itu hanya variabel lingkungan lainnya. Contoh teks akan jauh lebih lama.Mengambil
FOO
contoh di atas , jika Anda menjalankan program lain, itu tidak akan melihatFOO
variabel karena tidak diekspor. Ia hanya hidup dalam satu instance shell:Ketika saya pertama kali menjalankan
bash
shell baru di bawah yang sudah saya gunakan, kemudian mencoba menunjukkan nilainyaFOO
, saya mendapatkan kosong karenaFOO
tidak diekspor untuk melihat sub-program. Lalu saya keluar daribash
instance kedua , mengekspornya, berlaribash
lagi, dan sekarang instance kedua melihat nilaiFOO
.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.
sumber