Bir yoldaki tüm komut dosyaları nasıl çalıştırılır?


13

Parametre olarak bir yol alan bir komut dosyası olduğunu varsayalım. Bu yolda bulunan tüm komut dosyalarını nasıl yürütebilirim?

Yanıtlar:


14

Bir dizinin yolunu kastettiğinizi varsayarsak, kullanın run-parts. Gönderen man run-parts:

run-parts - run scripts or programs in a directory

İlk önce, çalıştırmak istediğiniz tüm komut dosyalarında yürütme iznini ayarlamanız gerekir. Normalde run-partsdizinleri yoksayar ve yürütülebilir olmayan dosyalar da bu dizinde bulunur.

Her ne kadar çalıştırmadan önce hangi --testseçeneklerin çalıştırılacağını kontrol etmelisiniz :

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

Bu run-partskomut dosyaları yürütmek için sıkı bir adlandırma kuralı olduğunu belirtmek gerekir :

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.

man run-partsDaha fazla fikir edinmek için kontrol edin .


Biraz okuma, ben buldum: #! / Bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run komut dosyası için "$ scripts_to_run_dir" / * test -x "$ script" ise; sonra "$ script" fi bitti Benim için çalıştı, ne düşünüyorsun?
— Lautaro Alvarez

@LautaroAlvarez Bu senaryo ile ne yapıyorsun, basit bir komutla kolayca yapılabilir run-parts /home/you/Dropbox/scripts_to_run.. ama isimlendirmeye dikkat et ..
— heemayl

çalışma parçaları serin. Ancak cron.d için yapılmış ve syslog'a cron.notice olarak yazılmıştır. Ama geçici atlama ve yedekleme dosyaları gibi iyi bir fikir kaynağı ...
— mmv-ru

9

Komut dosyalarınız doğru isimlere sahipse çalışma parçaları çalışır. Komut dosyalarınızı run-partskarmaşık adlandırma şemasına uyacak şekilde yeniden adlandırmak istemiyorsanız , bu kadar basit bir şey yapabilirsiniz.

for file in ~/target/*; do $file 2>/dev/null; done

Bu, bulunan tüm dosyaları (ve dizinleri) yürütmeye çalışır ~/target. 2>/dev/nullDizinleri veya olmayan çalıştırılabilir dosyaları çalıştırmak çalışırken yönlendirmeler hata iletileri şikayet etmeyecek şekilde.

Alternatif olarak, daha karmaşık olanları deneyebilirsiniz.

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

Bu, sonuçların her birinin bir dosya ( [ -f $file ]), yürütülebilir ( [ -x $file ]) olup olmadığını kontrol eder ve yalnızca bu testlerin her ikisi de başarılı olursa dosyayı yürütmeye çalışır.


Bu benim üzerinde çalıştığım bir projede (çatallı bir repo) mükemmel çalıştı - github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh .
— Rob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.