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.