Bagaimana cara menjalankan semua skrip di jalur?

13

Misalkan saya memiliki skrip yang menerima jalur sebagai parameter. Bagaimana saya bisa menjalankan semua skrip yang terletak di jalur itu?

Lautaro Alvarez
sumber

Jawaban:

14

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-partsakan 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 --testopsi:

run-parts --test /path/to/directory

Saya harus menyebutkan bahwa run-partsmemiliki 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-partsuntuk mendapatkan lebih banyak ide.

heemayl
sumber
Membaca sedikit, saya menemukan ini: #! / Bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run untuk skrip di "$ scripts_to_run_dir" / * lakukan jika test -x "$ script"; lalu "$ script" selesai Saya pikir, bagaimana menurut Anda?
Lautaro Alvarez
@LautaroAlvarez Apa yang Anda lakukan dengan skrip itu, dapat dengan mudah dilakukan dengan perintah sederhana run-parts /home/you/Dropbox/scripts_to_run.. hati-hati dengan penamaannya ..
heemayl
run-parts itu keren. Tapi itu dibuat untuk cron.d dan menulis ke syslog sebagai cron.notice. Tapi itu sumber ide yang bagus, seperti lewati temp dan file cadangan ...
mmv-ru
9

Run-parts akan berfungsi jika skrip Anda memiliki nama yang benar. Jika Anda tidak ingin berurusan dengan mengubah nama skrip Anda agar sesuai run-partsdengan 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/nullpesan 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.

terdon
sumber
Yang ini bekerja dengan sempurna bagi saya dalam suatu proyek (repo bercabang) yang saya kerjakan - github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh .
Rob