Onehdy jsem testoval některé základní shell skripty, které jsem vytvořil pro zábavu. Protože jsem ve skriptování shellu nováčkem, spustil jsem a otestoval skripty jeden po druhém. Bylo to v pořádku, pokud existuje jen několik skriptů. Jak rostl počet skriptů, zjišťuji, že testování všech je trochu časově náročné. Po chvíli hledání na webu jsem zjistil několik metod, jak spustit všechny skripty v adresáři v Linuxu, jeden po druhém.
Spouštějte všechny skripty v adresáři v Linuxu
V adresáři Dokumenty mám několik skriptů.
$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
Všechny jsou to jednoduché jednořádkové shellové skripty, které zobrazují daný řetězec (řetězce) pomocí příkazu "echo" ve standardním výstupu.
Než jsem věděl, že můžeme spouštět všechny skripty ve složce, obvykle bych skript vytvořil jako spustitelný takto:
$ chmod +x script.sh
Poté jej spustím pomocí příkazu:
$ ./script.sh
Nebo,
$ sh script.sh
Znovu udělám druhý skript spustitelným a spustím ho a tak dále.
No, existuje lepší způsob, jak to udělat. Všechny skripty můžeme spouštět v adresáři nebo cestě pomocí "run-parts" příkaz. Příkaz run-parts se používá ke spouštění skriptů nebo programů v adresáři nebo cestě.
$ run-parts <directory-path>
Jednou nevýhodou příkazu run-parts je, že nespustí všechny skripty. Bude to fungovat, pouze pokud mají vaše skripty správné názvy. Názvy se musí skládat výhradně z velkých a malých písmen v ASCII, ASCII číslic, ASCII podtržítek a ASCII minus-pomlček.
K vyřešení tohoto problému s názvy můžeme použít regulární výraz volba. Například následující příkaz najde a spustí všechny soubory skriptů v ~/Documents adresář, který začíná písmenem 's' a končí příponou 'sh':
$ run-parts --regex '^s.*sh$' ~/Documents
Spusťte všechny skripty v adresáři v Linuxu pomocí příkazu run-parts
Odstraňování problémů:
Pokud jste narazili na chybu podobnou níže;
run-parts: failed to exec Documents/script1.sh: Exec format error
Chcete-li to opravit, postupujte podle následujícího průvodce.
- Oprava „chyby formátu Exec“ při spouštění skriptů pomocí příkazu run-parts
Podobně, chcete-li spustit všechny soubory skriptů, které končí příponou .sh v adresáři Documents, spusťte:
$ run-parts --regex '.*sh$' ~/Documents
Chcete-li vytisknout názvy všech souborů v adresáři Dokumenty, které začínají písmenem 's' a končí příponou 'sh', spusťte:
$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Tento příkaz pouze vytiskne název souborů skriptu, ale nespustí je.
Chcete-li zobrazit seznam všech souborů s příponou .sh v adresáři Documents, spusťte:
$ run-parts --list --regex '.*sh$' Documents Documents/linux.sh Documents/ostechnix.sh Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Příkaz run-parts primárně používají úlohy cron a není spolehlivý pro ruční použití.
Další způsob, jak se vyhnout přejmenovávání skriptů, aby odpovídaly run-parts struktura pojmenování, můžete použít najít nebo pro smyčku příkazy.
Chcete-li najít a spustit všechny soubory skriptů, které začínají písmenem "s" ve složce ~/Documents spusťte:
$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
Pokud chcete spouštět všechny skripty v daném adresáři a všech jeho podadresářích, odeberte maxdepth možnost ve výše uvedeném příkazu:
$ find ~/Documents -type f -executable -name 's*' -exec {} \;
Chcete-li spustit všechny skripty, které končí příponou .sh" , spustit:
$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;
Najděte a spusťte všechny skripty v adresáři v Linuxu pomocí příkazu find
Tento způsob má i menší nevýhodu. Tento příkaz může spouštět pouze skripty, které může interpretovat váš aktuální shell. Pokud chcete spouštět všechny typy skriptů, například awk, perl, python, shell skripty, použijte cyklus for metoda jako níže.
$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Výše uvedený příkaz spustí skripty začínající písmenem "s" ve složce ~/Documents. Pokud chcete spustit všechny soubory, které končí příponou „.sh“, proveďte:
$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Další podrobnosti naleznete na manuálových stránkách.
$ man run-parts
$ man find
Doufám, že to pomůže.