Misalkan saya memiliki skrip yang menerima jalur sebagai parameter. Bagaimana saya bisa menjalankan semua skrip yang terletak di jalur itu?
Misalkan saya memiliki skrip yang menerima jalur sebagai parameter. Bagaimana saya bisa menjalankan semua skrip yang terletak di jalur itu?
Jawaban:
Dengan asumsi jalur yang Anda maksud jalur ke direktori, gunakan run-parts
. Dari man run-parts
:
run-parts - run scripts or programs in a directory
Pada awalnya Anda perlu mengatur izin eksekusi pada semua skrip yang ingin Anda jalankan. Biasanya run-parts
akan mengabaikan direktori dan juga file yang tidak dapat dieksekusi berada di direktori itu.
Meskipun sebelum menjalankan Anda harus memeriksa file mana yang akan dijalankan oleh --test
opsi:
run-parts --test /path/to/directory
Saya harus menyebutkan bahwa run-parts
memiliki konvensi penamaan yang ketat untuk skrip yang akan dieksekusi:
If neither the --lsbsysinit option nor the --regex option is given
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.
Periksa man run-parts
untuk mendapatkan lebih banyak ide.
run-parts /home/you/Dropbox/scripts_to_run
.. hati-hati dengan penamaannya ..
Run-parts akan berfungsi jika skrip Anda memiliki nama yang benar. Jika Anda tidak ingin berurusan dengan mengubah nama skrip Anda agar sesuai run-parts
dengan skema penamaan yang kompleks, Anda dapat melakukan sesuatu yang sederhana
for file in ~/target/*; do $file 2>/dev/null; done
Itu akan berusaha untuk mengeksekusi semua file (dan direktori) yang ditemukan di ~/target
. The 2>/dev/null
pesan pengalihan error sehingga tidak akan mengeluh ketika mencoba untuk menjalankan direktori atau file non executable.
Atau, Anda dapat mencoba yang lebih canggih
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
Ini akan memeriksa apakah masing-masing hasil adalah file ( [ -f $file ]
), dapat dieksekusi ( [ -x $file ]
) dan hanya jika kedua tes tersebut berhasil akan mencoba untuk mengeksekusi file.