Suatu hari saya telah menguji beberapa skrip shell dasar yang saya buat untuk bersenang-senang. Karena saya baru mengenal skrip shell, saya menjalankan dan menguji skrip satu per satu. Tidak apa-apa jika hanya ada beberapa skrip. Seiring bertambahnya jumlah skrip, saya merasa agak memakan waktu untuk menguji semuanya. Setelah sedikit pencarian web, saya menemukan beberapa metode untuk menjalankan semua skrip dalam direktori di Linux, satu demi satu.
Jalankan semua skrip dalam direktori di Linux
Saya memiliki beberapa skrip di direktori Documents saya.
$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
Semuanya adalah skrip shell satu baris sederhana yang menampilkan string yang diberikan menggunakan perintah "echo" dalam output standar.
Sebelum saya tahu bahwa kita dapat menjalankan semua skrip dalam satu folder, saya biasanya membuat skrip tersebut dapat dieksekusi seperti:
$ chmod +x script.sh
Kemudian saya menjalankannya menggunakan perintah:
$ ./script.sh
Atau,
$ sh script.sh
Sekali lagi, saya membuat skrip kedua dapat dieksekusi dan menjalankannya dan seterusnya.
Nah, ada cara yang lebih baik untuk melakukan ini. Kita dapat menjalankan semua skrip dalam direktori atau jalur menggunakan "run-parts" memerintah. Perintah run-parts digunakan untuk menjalankan skrip atau program dalam direktori atau jalur.
$ run-parts <directory-path>
Satu kelemahan dengan perintah run-parts adalah tidak menjalankan semua skrip. Ini hanya akan berfungsi jika skrip Anda memiliki nama yang benar. Nama harus seluruhnya terdiri dari huruf besar dan kecil ASCII, angka ASCII, garis bawah ASCII, dan tanda hubung minus ASCII.
Untuk mengatasi masalah penamaan ini, kita dapat menggunakan regex pilihan. Misalnya, perintah berikut akan menemukan dan menjalankan semua file skrip di ~/Documents direktori yang dimulai dengan huruf 's' dan diakhiri dengan ekstensi 'sh':
$ run-parts --regex '^s.*sh$' ~/Documents
Jalankan semua skrip dalam direktori di Linux dengan perintah run-parts
Pemecahan masalah:
Jika Anda mengalami kesalahan seperti di bawah ini;
run-parts: failed to exec Documents/script1.sh: Exec format error
Lihat panduan berikut untuk memperbaikinya.
- Perbaiki “Exec format error” Saat Menjalankan Skrip Dengan Perintah run-parts
Demikian pula, untuk menjalankan semua file skrip yang diakhiri dengan .sh di direktori Documents, jalankan:
$ run-parts --regex '.*sh$' ~/Documents
Untuk mencetak nama semua file di direktori Documents yang dimulai dengan huruf 's' dan diakhiri dengan ekstensi 'sh', jalankan:
$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Perintah ini hanya akan mencetak nama file skrip, tetapi tidak akan mengeksekusinya.
Untuk membuat daftar semua file yang diakhiri dengan .sh di direktori Documents, jalankan:
$ run-parts --list --regex '.*sh$' Documents Documents/linux.sh Documents/ostechnix.sh Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Perintah run-parts terutama digunakan oleh cron jobs dan tidak dapat diandalkan untuk penggunaan manual.
Cara lain untuk menghindari berurusan dengan mengganti nama skrip Anda agar sesuai dengan run-parts struktur penamaan, Anda dapat menggunakan find atau untuk loop perintah.
Untuk menemukan dan menjalankan semua file skrip yang dimulai dengan huruf "s" di folder ~/Documents, jalankan:
$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
Jika Anda ingin menjalankan semua skrip di direktori yang diberikan dan semua subdirektorinya, hapus maxdepth pilihan pada perintah di atas:
$ find ~/Documents -type f -executable -name 's*' -exec {} \;
Untuk menjalankan semua skrip yang diakhiri dengan ekstensi ".sh" , jalankan:
$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;
Temukan dan jalankan semua skrip dalam direktori di Linux menggunakan perintah find
Metode ini juga memiliki kelemahan kecil. Perintah ini hanya dapat menjalankan skrip yang dapat diinterpretasikan oleh shell Anda saat ini. Jika Anda ingin menjalankan semua jenis skrip, misalnya awk, perl, python, skrip shell, gunakan for loop metode seperti di bawah ini.
$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Perintah di atas akan menjalankan skrip yang dimulai dengan huruf "s" di folder ~/Documents. Jika Anda ingin menjalankan semua file yang diakhiri dengan ekstensi ".sh", lakukan:
$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Untuk detail lebih lanjut, lihat halaman manual.
$ man run-parts
$ man find
Semoga membantu.