Mengapa beberapa program memerlukan nilai Path, dan beberapa lainnya tidak di Windows?


6

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?


1
Perintah-perintah baris berfungsi lebih baik jika Anda memilikinya di %PATH%, Anda bisa mengetik perintah baru di "shell".
cylgalad

baik, itu berarti program lain tidak perlu menebak direktori apa program ini, mereka dapat mengetahui nama exe dan membiarkan cmd memindai path.
barlop

Jawaban:


3

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 7zauntuk 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.)


Untuk informasi lebih lanjut tentang Linux, lihat pertanyaan penanya nanti di AskUbuntu: askubuntu.com/questions/715208
JdeBP

2

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 EXEatau COM, dan skrip batch memiliki ekstensi BATatau 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)


1

Di Windows, aplikasi dapat mendaftarkan jalurnya {HKCU|HKLM}\Software\Microsoft\Windows\CurrentVersion\App Pathsdi bawah dalam registri. Windows kemudian akan mengingat di mana menemukan file .exe masing-masing, tanpa membengkak PATHvariabel 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 wordpadpada cmd prompt) meskipun %ProgramFiles%\Windows NT\Accessoriestidak ada dalam PATH.


Ini bekerja dengan menu Run in Start. Namun pendekatan ini tidak bekerja dengan Command Prompt: Anda harus memiliki executable di PATH.
Alexey Ivanov

@AlexeyIvanov Ini berfungsi pada cmd prompt seperti yang tertulis. Perhatikan bahwa Anda harus menggunakan start- start wordpadakan bekerja, tetapi tidak wordpadakan. (Pada level API perbedaannya adalah bahwa startpanggilan ShellExecEx yang mengenali dan menggunakan App Paths, saat menjalankan langsung memanggil CreateProcess yang tidak.)
dxiv

Jika Anda harus menggunakan perintah lain, startdalam 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.)
Alexey Ivanov
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.