2012-10-25 42 views

回答

515

如果要執行僅在上一個成功的每條命令,然後使用&&運營商將它們結合起來:

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

如果其中一個命令失敗,那麼其他所有的命令下面也不會執行。

如果你想執行的所有命令不管以前的失敗還是不行,請用分號分隔:

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

在你的情況,我想你想第一種情況下一個命令的執行取決於前一個的成功。

你也可以把一個腳本的所有命令和執行,而不是:

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

(反斜線在該行的末尾有沒有防止shell認爲下一行是一個新的命令;如果省略反斜槓,你需要在一行寫全命令)

保存,爲一個文件,例如myscript,並使其可執行:

chmod +x myscript 

您現在可以像機器上的其他程序一樣執行該腳本。但是,如果你不把它放在你的PATH環境變量(例如/usr/local/bin,或在某些Linux發行版~/bin)中列出的目錄中,那麼你需要指定該腳本的路徑。如果是在當前目錄下,你執行它:

./myscript 

腳本的命令的工作方式與在第一個例子中的命令一樣;下一個命令僅在前一個成功時才執行。對於所有的命令無條件執行,只是在自己的行列出每個命令:

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

+1爲好的答案。 –

+2

+1。這正是我正在尋找的! –

+21

對於將來的讀者:如果只希望在最後一個命令失敗的情況下執行下一個命令,那麼也可以使用'||'代替分號或'&&'。正如在嘗試這個,如果失敗了,嘗試一下。 – DeVadder

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

它與OP腳本不一樣,請解釋:如果aa命令失敗,腳本將中止 –

+3

另外,您可以使用'cmd1 || cmd2'分隔符,如果你只有在'cmd1'返回非零狀態到shell時需要'cmd2'才能執行,你可以使用'cmd1';如果你想運行這兩個命令而不考慮它們的返回狀態。 –

+0

@sputnick它應該是,我只是粘貼它並連接命令與&& –

9

您可以用分號分隔的命令:

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

是什麼意思?

1

如果要執行所有的命令,前一個是否執行或沒有,你可以用分號(;)分隔命令。

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

如果你要執行的下一個命令只有在以前的命令成功,那麼你可以使用& &分離的命令。

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

在你的情況下,連續命令的執行似乎取決於前面的命令,所以使用第二個例子i。即使用& &來加入這些命令。

36

我發現使用;分離命令只能在前臺運行。例如:

cmd1; cmd2; cmd3 & - 只在後臺執行cmd3,而 cmd1 && cmd2 && cmd3 & - 將在後臺,如果沒有錯誤,執行的整個鏈條。

爲照顧無條件執行,使用括號來解決這個:

(cmd1; cmd2; cmd3) & - 將執行的命令的鏈的背景下,即使任何步驟失敗。

+1

您示例中的尾隨&符號(&)是故意的嗎?如果是這樣,它是爲了什麼? – Technophile

+4

@Technophile這是運行[背景命令](http://unix.stackexchange.com/questions/103731/run-a-command-without-making-me-wait) –

+0

一個簡單,簡短和直接的答案,你應該更經常地使用StackExchange網站Dean。感謝您的輸入。 – CPHPython

0

只有一個&符的效用是什麼? 今天上午,我做的XFCE面板啓動器(在Manjaro + XFCE)推出同時2個密碼管理器:

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

但我想這是行不通的。 IE瀏覽器,第一個應用程序啓動,但第二個開始,只有當先前關閉: -/

然而,我發現(只有一個符號):

sh -c "keepassx & password-gorilla" 

和它的作品,因爲我現在想要的。 ..