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
$PATH
berbahaya, tetapi menambahkan subdirektori tidak terlalu buruk. Tapi itu biasanya tidak berguna , dan mungkin tidak efisien (dan kadang-kadang bahkan membuat Anda batas ukuran lingkungan)
~/bin
atau ~/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: bin
untuk executable, lib
untuk perpustakaan, doc
untuk 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/bin
dan /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 bin
subdirektori 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 $PATH
adalah untuk membuat tautan simbolik dalam direktori di jalur seperti /usr/local/bin
. The stow
utilitas (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 $PATH
menyertakan /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.