Sepertinya ketika menambahkan direktori ke $ PATH, subdirektori tidak ditambahkan secara rekursif. Jadi bisakah saya melakukan itu? Atau adakah alasan mengapa ini tidak didukung?
Sepertinya ketika menambahkan direktori ke $ PATH, subdirektori tidak ditambahkan secara rekursif. Jadi bisakah saya melakukan itu? Atau adakah alasan mengapa ini tidak didukung?
Jawaban:
Tambahkan secara rekursif menggunakan find seperti:
PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )
PERINGATAN: Seperti disebutkan dalam komentar untuk pertanyaan ini tidak dianjurkan karena menimbulkan risiko keamanan karena tidak ada jaminan bahwa file yang dapat dieksekusi dalam direktori yang ditambahkan tidak berbahaya.
Mungkin ini solusi yang lebih baik untuk mengikuti jawaban Gilles dan menggunakan stow
$PATHberbahaya, tetapi menambahkan subdirektori tidak terlalu buruk. Tapi itu biasanya tidak berguna , dan mungkin tidak efisien (dan kadang-kadang bahkan membuat Anda batas ukuran lingkungan)
~/binatau ~/scripts), sehingga keamanannya sama.
~/scripts. Saya tidak dan seharusnya tidak ada orang lain
Struktur direktori unix yang biasa memiliki file aplikasi diurutkan ke dalam direktori berdasarkan jenis: binuntuk executable, libuntuk perpustakaan, docuntuk dokumentasi dan sebagainya. Saat itulah mereka dipasang di direktori yang terpisah; sering aplikasi dikelompokkan menjadi beberapa direktori (maka banyak sistem memiliki hanya tiga direktori di $PATH: /usr/local/bin, /usr/bindan /bin). Jarang memiliki file dan subdirektori yang dapat dieksekusi di dalam direktori, jadi tidak ada permintaan untuk menyertakan subdirektori direktori $PATH.
Apa yang kadang-kadang berguna adalah untuk memasukkan semua binsubdirektori dari subdirektori dari direktori yang diberikan dalam $PATH:
for d in /opt/*/bin; do PATH="$PATH:$d"; done
Namun, ini jarang dilakukan. Metode yang biasa ketika executable di direktori non-standar $PATHadalah untuk membuat tautan simbolik dalam direktori di jalur seperti /usr/local/bin. The stowutilitas (atau xstow) dapat berguna dalam hal itu.
Salah satu alasan mengapa hal ini tidak didukung adalah karena direktori bin / (dan yang serupa) menggunakan tautan simbolik untuk menunjuk ke direktori spesifik di mana executable aktual untuk program diinstal.
Jadi, jika Anda $PATHmenyertakan /usr/local/bin(yang kemungkinan besar terjadi) folder itu penuh dengan tautan simbolis (seperti ruby) yang menunjuk ke direktori spesifik tempat kode untuk menjalankan ruby ditemukan (seperti ../Cellar/ruby/2.1.3/bin/ruby).
Inilah sebabnya mengapa Anda tidak harus menentukan folder masing-masing yang dapat dieksekusi di Anda $PATH; tautan simbolik yang biasanya ditemukan di direktori bin / type menangani itu untuk Anda.
Di zsh , $ PATH dapat ditambahkan sebagai array. Anda dapat menggunakan shell globbing untuk menambahkan beberapa subdirektori ke array $ PATH.
Contoh:
Dalam .zshrc:
typeset -U PATH path
BINPATH="$HOME/bin"
path+=("$BINPATH" ${BINPATH}/*/)
export PATH
Ini akan menambahkan semua subdirektori dari $ BINPATH ke array $ PATH.