2012-05-18 39 views
3

我正在尋找一個選項來對存儲庫執行hg更新,或者如果它不存在,請將其克隆。所以命令只有在出現問題時纔會失敗(克隆或更新)。如何在一行bash中進行hg更新或克隆?

這必須在bash工作,最好是如果你已經配置set -e

+2

不是'hg'特定的,但是...爲什麼你需要它在一個命令? 'A || B'應該做正確的事情,只有當'A'和'B'都失敗時纔會失敗。 (澄清,像'hg update || hg clone ') – Amadan

+0

讓它成爲答案!仍然我希望在命令成功時不會在輸出中看到任何錯誤。儘管如此,當它失敗時看到它們是非常需要的。 – sorin

+0

我不明白,你能解釋一下嗎?通常在回購倉庫內執行'hg update',例如, '〜/ src/myproj $ hg up'。另一方面,'hg clone'在'沒有回購時'時執行,例如'〜/ src $ hg clone http:// server/myproj myproj'。你如何設想你的組合命令被調用?哪裏? – Helgi

回答

6

在bash,||析取操作,能做到這樣的場景:嘗試的第一個命令,如果失敗嘗試第二個命令,如果失敗則返回錯誤代碼。具體到這個問題,

hg update || hg clone <source> 

會嘗試更新;如果失敗,它會嘗試克隆。如果克隆失敗,整行將退出克隆的錯誤代碼。

我不希望在命令成功時在輸出中看到任何錯誤。

爲什麼命令成功時會出現錯誤?

你可以通過>/dev/null來終止輸出;你可以通過2>/dev/null殺死錯誤;無論是單獨使用每個組件,還是將整行括在括號中並在後面添加重定向。

3
cd <directory> && hg update || hg clone <source> 

如果cd由於目錄不存在而失敗,那麼hg克隆將從正確的目錄級別運行。