2012-10-25 27 views

cevap

515

önceki biri başarılı yalnızca her komutu çalıştırmak istiyorsanız, o zaman && operatörünü kullanarak bunları birleştirmek:

komutlardan biri başarısız olursa
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 

, o zaman tüm diğer komutlar da olmayacak aşağıdaki idam.

Eğer noktalı virgülle ayırın bakmaksızın önceki olanları başarısız olsun ya da olmasın tüm komutları yürütmek istiyorsanız

: Senin durumunda

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install 

, ilk senin davayı istiyorum düşünüyorum nerede sonraki komutun yürütülmesi Bir öncekinin başarısına bağlıdır. Bir sonraki satır yeni bir komut olduğunu düşünerek gelen kabuk orada önlemek için satırın sonunda edilir

#! /bin/sh 
cd /my_folder \ 
&& rm *.jar \ 
&& svn co path to repo \ 
&& mvn compile package install 

(ters eğik çizgi:

Ayrıca senaryodaki tüm komutları koymak ve bunun yerine yürütebileceği .; Eğer ters eğik çizgi atlarsanız, örneğin myscript için bir dosyaya) tek bir satırda bütün komut yazmak için bu kaydet

gerekir, ve çalıştırılabilir yapın:

chmod +x myscript 

Artık bu komut dosyasını makinedeki diğer programlar gibi çalıştırabilirsiniz. Ancak, PATH ortam değişkeninizde (örneğin, /usr/local/bin veya bazı Linux dağıtımlarında ~/bin) listelenen bir dizinin içine yerleştirmezseniz, o komut dosyasının yolunu belirtmeniz gerekir. İlk örnekte komutla aynı şekilde çalışır komut

./myscript 

komutları;: o anki dizinde konusuysa, bunu çalıştırmak Bir sonraki komut sadece bir öncekinin başarılı olması durumunda yürütülür. tüm komutların koşulsuz yürütülmesi için, sadece kendi satırında her komutu listelemek:

#! /bin/sh 
cd /my_folder 
rm *.jar 
svn co path to repo 
mvn compile package install 
+8

+1. –

+2

+1. Bu tam olarak aradığım şey! –

+21

Gelecek okuyucular için: Ayrıca, '' i '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'kullanabilirsiniz. Bunu denerken, başarısız olursa, bunu deneyin. – DeVadder

1
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 
+0

OP komut dosyasıyla aynı değil, lütfen açıklayın: aa komutu başarısız olursa, betik –

+3

'u iptal eder Ek olarak, 'cmd1 || cmd2' ayracı 'cmd1' yerine yalnızca' cmd1 'sıfır olmayan durumu kabuktan döndürdüğünde çalıştırmaya ihtiyacınız varsa ve 'cmd1; cmd2's, dönüş durumlarından bağımsız olarak her iki komutu da çalıştırmak isterseniz. –

+0

@sputnick Olmalıdır, ben sadece yapıştırdı ve && –

9

için Bir virgül kullanarak komutları ayırabilirsiniz:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install 

ne demek miydi?

1

önceki bir yürütür ya da olmasın, tüm komutları yürütmek istiyorsanız, noktalı virgül kullanabilirsiniz; ayırmak için() emreder. önceki komut başarılı yalnızca sonraki komutu çalıştırmak istiyorsanız

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install 

, o zaman komutları ayırmak için & & kullanabilirsiniz. Senin durumunda

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install 

, ardışık komutları yürütme önceki komutlara bağlı, bu nedenle ikinci örnek ı kullanmak gibi görünüyor.e. Komutları birleştirmek için & & kullanın.

36

Kullanarak buldum; Komutları ayırmak sadece ön planda çalışır. örneğin:

cmd1; cmd2; cmd3 & - hata yoksa EĞER arka planda tüm zincirini çalıştırır - cmd1 && cmd2 && cmd3 & oysa sadece arka planda cmd3 çalıştırır.

parentezlerle çözer, koşulsuz yürütme sağlamak için bu:

(cmd1; cmd2; cmd3) &

- herhangi bir adım başarısız olsa da, arka komutların zinciri çalıştırır.

+1

Örneklerinizin sonundaki işareti (&) kasıtlı mıydı? Eğer öyleyse, ne için? – Technophile

+4

@Technophile Bir [arka plan komutu] çalıştırmak için (http://unix.stackexchange.com/questions/103731/run-a-command-without-making-me-wait) –

+0

Bir basit, kısa ve doğrudan cevap, sen StackExchange web sitelerini daha sık kullanmalıdır Dean. Girdiniz için teşekkürler. – CPHPython

0

Sadece bir Ampersand'ın faydası nedir? Bu sabah, aynı anda 2 şifreleri yöneticileri başlatmak için (Manjaro + XFCE olarak) XFCE panelinde bir başlatıcısı yaptı:

sh -c "keepassx && password-gorilla" 
or 
sh -c "keepassx; password-gorilla" 

Ama istediğim gibi çalışmıyor. IE, ilk uygulama başladığında ancak ikinci başlar önceki kapalı olduğunda: -/

Ancak, ben buldum (tek ve işareti ile):

sh -c "keepassx & password-gorilla" 

ve şimdi istediğim gibi çalışır. ..

İlgili konular