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?

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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.