Dasar pemikiran untuk aturan /
POSIX PATH
Aturan disebutkan di: Mengapa Anda perlu ./ (dot-slash) sebelum dieksekusi atau nama skrip untuk menjalankannya dalam bash? tapi saya ingin menjelaskan mengapa saya pikir itu adalah desain yang bagus dengan lebih detail.
Pertama, versi lengkap aturan secara eksplisit adalah:
- jika path berisi
/
(mis ./someprog
. /bin/someprog
,./bin/someprog
): CWD digunakan dan PATH tidak
- jika path tidak mengandung
/
(misalnya someprog
): PATH digunakan dan CWD tidak
Sekarang, misalkan menjalankan itu:
someprog
akan mencari:
- relatif terhadap CWD pertama
- relatif terhadap PATH setelah
Kemudian, jika Anda ingin lari /bin/someprog
dari distro Anda, dan Anda melakukannya:
someprog
kadang-kadang akan berfungsi, tetapi yang lain akan gagal, karena Anda mungkin berada di direktori yang berisi someprog
program lain yang tidak terkait
Oleh karena itu, Anda akan segera mengetahui bahwa ini tidak dapat diandalkan, dan Anda akan selalu selalu menggunakan jalur absolut ketika Anda ingin menggunakan PATH, karena itu mengalahkan tujuan PATH.
Ini juga mengapa memiliki jalur relatif di PATH Anda adalah ide yang sangat buruk. Saya melihat Anda,node_modules/bin
.
Sebaliknya, misalkan menjalankan:
./someprog
Akan mencari:
- relatif terhadap PATH terlebih dahulu
- relatif terhadap CWD setelah
Kemudian, jika Anda baru saja mengunduh skrip someprog
dari repositori git dan ingin menjalankannya dari CWD, Anda tidak akan pernah yakin bahwa ini adalah program aktual yang akan dijalankan, karena mungkin distro Anda memiliki:
/bin/someprog
yang ada di Anda PATH dari beberapa paket yang Anda instal setelah minum terlalu banyak setelah Natal tahun lalu.
Karena itu, sekali lagi, Anda akan dipaksa untuk selalu menjalankan skrip lokal relatif terhadap CWD dengan path lengkap untuk mengetahui apa yang Anda jalankan:
"$(pwd)/someprog"
yang akan sangat mengganggu juga.
Aturan lain yang mungkin membuat Anda tergoda untuk melakukannya adalah:
jalur relatif hanya menggunakan PATH, jalur absolut hanya CWD
tetapi sekali lagi ini memaksa pengguna untuk selalu menggunakan jalur absolut untuk skrip non-PATH "$(pwd)/someprog"
.
The /
aturan penelusuran jalur menawarkan sederhana untuk mengingat solusi untuk tentang masalah:
- slash: jangan gunakan
PATH
- tidak ada garis miring: hanya gunakan
PATH
yang membuatnya sangat mudah untuk selalu tahu apa yang Anda jalankan, dengan mengandalkan fakta bahwa file dalam direktori saat ini dapat dinyatakan sebagai ./somefile
atau somefile
, dan karenanya memberikan makna khusus kepada salah satu dari mereka.
Kadang-kadang, sedikit menjengkelkan bahwa Anda tidak dapat mencari some/prog
relatif terhadap PATH
, tetapi saya tidak melihat solusi yang lebih waras untuk ini.