Mengapa Ketika saya menginstal Komposer pada Windows 7/8/10, atau beberapa program yang sesuai dengan UNIX seperti GNU Tar , saya perlu menetapkan nilai Path mereka, dan jika tidak, mereka tidak akan dapat digunakan oleh program lain?
Mengapa Ketika saya menginstal Komposer pada Windows 7/8/10, atau beberapa program yang sesuai dengan UNIX seperti GNU Tar , saya perlu menetapkan nilai Path mereka, dan jika tidak, mereka tidak akan dapat digunakan oleh program lain?
Jawaban:
Saya menjawab ini untuk Microsoft Windows. Saya melihat ada juga tag Linux di sini. Nah, konsep yang sama berlaku. (Catatan Linux lebih lanjut disebutkan dalam paragraf terakhir.)
Anda dapat menggunakan program jika tidak ada dalam direktori yang ditentukan oleh variabel lingkungan PATH. Namun, ini agak kurang nyaman.
Sebagai contoh, saya sering menjalankan 7-Zip meskipun tidak ada di jalur. Jadi alih-alih memulai baris perintah dengan "7z", saya membuat baris perintah mulai dengan:
"C:\Program Files\7-Zip\7z.exe"
Itu tidak seburuk kelihatannya, karena apa yang saya ketik sebenarnya biasanya lebih mirip:
C: \ tabPro tab7 tab7tab
(Saya mendengarkan bunyi bip yang dapat terjadi jika ada kesalahan ketik, dan setelah ekspansi terakhir saya dengan tabkunci, saya juga memeriksa keakuratan baris perintah, untuk memastikan itu menjalankan apa yang saya inginkan.)
Suatu program dapat memeriksa bagaimana Anda merujuk program pada baris perintah, dan dapat memeriksa direktori Anda saat ini. Jadi suatu program dapat bertindak berbeda berdasarkan apakah itu ada dalam PATH. Namun, itu tidak mungkin.
Solusi alternatif: Sesuaikan variabel lingkungan PATH untuk juga menyertakan direktori tempat program diinstal.
Solusi alternatif lain: Cukup tempatkan file yang dapat dieksekusi ke dalam direktori yang sudah ada di PATH. (Namun, beberapa program lebih rumit, karena mereka mungkin juga memerlukan file lain, seperti file DLL, disalin ke direktori seperti itu; oleh karena itu, pendekatan ini biasanya tidak disarankan untuk program yang Anda perlu "instal", dengan menjalankan "instalasi" program ". Namun, untuk executable sederhana yang hanya dapat dijalankan tanpa memerlukan banyak file dukungan, ini sering dapat dilakukan.)
Di Linux, ada beberapa perbedaan kecil: Anda hanya akan menggunakan " echo ${PATH}
" bukan " echo %PATH%
", gunakan garis miring bukan garis miring terbalik, gunakan 7za
untuk 7-Zip bukan 7z.exe
. Jika Anda ingin menyesuaikan jalur, Anda dapat menggunakan perintah yang berbeda, seperti export
, tetapi sangat tergantung pada shell apa yang Anda gunakan.)
Mengapa beberapa program memerlukan nilai Path, dan beberapa lainnya tidak di Windows?
Mengapa Ketika saya menginstal Komposer pada Windows 7/8/10, atau beberapa program yang sesuai dengan UNIX seperti GNU Tar, saya perlu menetapkan nilai Path mereka, dan jika tidak, itu tidak akan dapat digunakan oleh program lain?
PATH adalah variabel lingkungan pada sistem operasi mirip Unix, DOS, OS / 2, dan Microsoft Windows, yang menetapkan sekumpulan direktori tempat program yang dapat dijalankan. Secara umum, setiap proses eksekusi atau sesi pengguna memiliki pengaturan PATH sendiri.
DOS, OS / 2, dan Windows
Beberapa program dapat menambahkan direktori mereka ke bagian depan konten variabel PATH selama instalasi, untuk mempercepat proses pencarian dan / atau mengabaikan perintah OS. Di era DOS, itu adalah kebiasaan untuk menambahkan garis PATH {program directory};%PATH%
atau .SET PATH={program directory};%PATH%
AUTOEXEC.BAT
Ketika sebuah perintah dimasukkan dalam shell perintah atau panggilan sistem dibuat oleh program untuk menjalankan program, sistem pertama-tama mencari direktori kerja saat ini dan kemudian mencari path, memeriksa setiap direktori dari kiri ke kanan, mencari nama file yang dapat dieksekusi yang cocok dengan nama perintah yang diberikan. Program yang dapat dijalankan memiliki ekstensi nama file EXE
atau COM
, dan skrip batch memiliki ekstensi BAT
atau CMD
. Ekstensi nama file yang dapat dieksekusi lainnya juga dapat didaftarkan ke sistem.
Unix dan Unix-like
Ketika nama perintah ditentukan oleh pengguna atau panggilan exec dibuat dari suatu program, sistem mencari $PATH
, memeriksa setiap direktori dari kiri ke kanan dalam daftar, mencari nama file yang cocok dengan nama perintah. Setelah ditemukan, program dijalankan sebagai proses anak dari command shell atau program yang mengeluarkan perintah.
Sumber: PATH_ (variabel)
Di Windows, aplikasi dapat mendaftarkan jalurnya {HKCU|HKLM}\Software\Microsoft\Windows\CurrentVersion\App Paths
di bawah dalam registri. Windows kemudian akan mengingat di mana menemukan file .exe masing-masing, tanpa membengkak PATH
variabel lingkungan.
Dari Pendaftaran Aplikasi :
Aplikasi yang diinstal untuk per pengguna dapat didaftarkan di bawah HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths. Aplikasi yang diinstal untuk semua pengguna komputer dapat didaftarkan di bawah HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths.
Entri yang ditemukan di bawah Jalur Aplikasi digunakan terutama untuk tujuan berikut:
- Untuk memetakan nama file yang dapat dieksekusi aplikasi ke jalur yang sepenuhnya memenuhi syarat file itu.
- Untuk informasi pra-pend ke variabel lingkungan PATH pada per-aplikasi, per-proses.
Misalnya, instalasi Windows default memiliki entri registri:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE
(Default)="%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE"
Ini memungkinkan WordPad untuk memulai dari Mulai / Jalankan dengan mengetikkan saja wordpad
(atau start wordpad
pada cmd prompt) meskipun %ProgramFiles%\Windows NT\Accessories
tidak ada dalam PATH.
start
- start wordpad
akan bekerja, tetapi tidak wordpad
akan. (Pada level API perbedaannya adalah bahwa start
panggilan ShellExecEx yang mengenali dan menggunakan App Paths
, saat menjalankan langsung memanggil CreateProcess yang tidak.)
start
dalam hal ini, alih-alih nama program yang ingin Anda jalankan, maka itu tidak berfungsi. Dan detail kecil ini adalah masalah besar. (Saya tahu tentang perbedaannya, terima kasih.)
%PATH%
, Anda bisa mengetik perintah baru di "shell".