.bashrc
File saya berisi garis ke efek ini:
alias prog="/path/to/script.sh $(find $(pwd) -name prog)"
Ketika saya mengomentari baris ini, Bash memulai hampir secara instan ketika saya membuka terminal baru. Dengan baris ini, ada penundaan 4-5 detik sebelum kursor saya muncul.
Menghapus perintah bersarang $(pwd)
, dll. Mempercepatnya lagi juga. Mengapa ini terjadi? Apakah saya masih bisa menggunakan perintah bersarang?
find
perintah, yang dieksekusi pada saat boot dan dapat memakan waktu lama untuk dieksekusi, tergantung pada struktur direktori. Jika Anda menggunakan tanda kutip tunggal dan bukan tanda kutip ganda,find
akan dieksekusi pada saat run time, ketikaalias
dijalankan. Itu tergantung pada direktori kerja yang ingin Anda gunakan, yang saat ini pada saat deklarasi, atau pada saat dijalankan Omong-omong$(pwd)
adalah cara yang agak tidak efisien untuk mengekspresikan.
atau$PWD
.find
? Setelah Anda menginstalnya, Anda tahu di mana itu. Bahkan jika Anda sering memperbaruinya dan mengubah namanya, Anda dapat mempertahankan tautan simbolik agar selalu tersedia dengan nama tetap.Jawaban:
Karena substitusi perintah berada di dalam tanda kutip ganda, ia dievaluasi pada saat perintah tersebut didefinisikan. Ini menyebabkan
find
untuk melihat isi hard disk Anda saat.bashrc
sedang berjalan.Anda, sebaliknya, tampaknya ingin itu dievaluasi pada saat digunakan. Dalam hal ini, gunakan tanda kutip tunggal:
Perhatikan bahwa alias ini akan gagal jika ada file yang ditemukan memiliki spasi putih di namanya. Untuk menghindari itu:
Bentuk yang terakhir ini akan bekerja dengan andal untuk segala jenis nama file.
sumber
prog
,find
akan perlu dijalankan, sedangkan sebelumnya, itu akan dijalankan hanya sekali (pada shell startup).find
biasanya jauh lebih cepat.prog
dan menjalankan kembalifind
jika jalan lama tidak ada lagi?