Masalah dengan $ PATH dan file yang dapat dieksekusi

8

Saya memiliki file executable unix yang terletak di direktori yang saya buat. Saya percaya saya perlu mendapatkan direktori ini di saya $PATHsehingga unix executable dapat dieksekusi, tetapi dokumentasi untuk kode sumber mengatakan bahwa saya perlu mengedit file konfigurasi shell saya untuk menambah $home/meme/binjalur shell saya.

dr.bunsen
sumber

Jawaban:

10

Jika Anda ingin dapat menjalankan program dengan mengetikkan namanya pada baris perintah, program yang dapat dieksekusi harus berada di salah satu direktori yang tercantum dalam PATHvariabel lingkungan. Anda dapat melihat nilai saat ini dari variabel seperti ini ( $adalah prompt Anda, dan nilai di bawah adalah contoh):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

Anda punya beberapa pilihan; sementara # 1 dan # 2 melibatkan konsep yang kurang maju, saya sarankan # 3 yang kurang berhasil dalam praktiknya:

  • Anda bisa meletakkan file executable di direktori yang sudah ada di folder Anda PATH. Misalnya, jika /home/drbunsen/binsudah ada di Anda PATH, Anda dapat menempatkan executable di sana. Atau Anda dapat meletakkan executable di /usr/local/binjika Anda ingin itu tersedia untuk semua pengguna.
  • Anda dapat menambahkan direktori di mana executable berada di Anda PATH. Edit file ~/.profile( ~/berarti file itu ada di direktori home Anda) (buat file jika tidak ada). Tambahkan baris seperti ini:

    PATH=$PATH:$HOME/meme/bin
    

    (Perhatikan bahwa itu $HOME, bukan $home; unix umumnya case-sensitive. Anda juga dapat menulis ~/meme/bin, ~adalah sinonim untuk $HOMEketika itu di awal jalur file.) Perubahan akan berlaku saat berikutnya Anda masuk. Anda dapat mengetik ini baris yang sama di terminal, dan itu akan mempengaruhi shell yang berjalan di terminal itu dan program apa pun yang diluncurkan darinya.

  • Pendekatan yang saya sarankan adalah untuk menjaga executable dengan file-file lain yang merupakan bagian dari program, dalam direktori sendiri, tetapi tidak mengubah PATHjuga.
    Mempertahankan executable $HOME/memememiliki keuntungan bahwa jika Anda ingin menghapus atau meningkatkan program, semuanya ada di satu tempat. Beberapa program bahkan memerlukan ini untuk menemukan file yang mereka gunakan. Tidak mengubah PATHmemiliki keuntungan bahwa menginstal dan menghapus instalan program kurang bekerja.
    Untuk mendapatkan yang terbaik dari kedua dunia, buat tautan simbolis di direktori pada Anda PATH, menunjuk ke executable yang sebenarnya. Dari baris perintah, jalankan perintah seperti ini:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Itu dengan asumsi bahwa ~/binitu sudah ada pada Anda PATH; jika tidak, tambahkan melalui ~/.profileseperti yang ditunjukkan di atas. Pilih lokasi lain jika Anda suka. Sekarang membuat program tersedia adalah masalah menciptakan tautan simbolik; membuat mereka tidak tersedia adalah masalah menghapus tautan simbolik; dan Anda dapat dengan mudah melacak program apa yang telah Anda instal secara manual dan di mana mereka tinggal dengan melihat tautan simbolis.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Gilles, wow terima kasih BANYAK untuk penjelasan rinci. Saya sangat menghargai bantuan Anda. Terima kasih telah meluangkan waktu untuk menjawab pertanyaan saya secara terperinci dan pada tingkat yang membuat segalanya jernih.
dr.bunsen
Hal lain yang saya perhatikan adalah bahwa di direktori home / meme / tampaknya tidak ada direktori / bin. Apakah saya perlu membuat bin agar saya dapat membuat tautan simbolis di sini ke saya PATH? Terima kasih.
dr.bunsen
@ dr.bunsen ~/binadalah lokasi umum, dan beberapa distribusi membuatnya secara otomatis. Jika milik Anda tidak, Anda harus membuatnya dan menambahkannya PATHsecara manual. Lokasi ~/binhanya sebuah konvensi, Anda dapat memilih nama lain jika Anda suka.
Gilles 'SO- berhenti bersikap jahat'
Perintah wildcard tidak berfungsi karena ln mengartikan item terakhir dalam ekspansi sebagai direktori: "Penggunaan: ln [OPSI] ... [-T] TARGET LINK_NAME (formulir 1) atau: ln [OPSI] ... TARGET ( Formulir 2) atau: Dalam [OPSI] ... TARGET ... DIRECTORY (formulir ke-3) atau: Dalam [OPSI] ... -t TARGET DIRECTORY ... (bentuk ke-4) "Untuk menyelesaikan ini, saya menambahkan" - t ./ "
adam.r
1
@ adam.r saya menulis ln -s ../meme/bin/* ., bukan ln -s ../meme/bin/*. Sepertinya Anda melewatkan satu karakter saat menyalin perintah.
Gilles 'SANGAT berhenti menjadi jahat'