我正在尋找一個選項來對存儲庫執行hg更新,或者如果它不存在,請將其克隆。所以命令只有在出現問題時纔會失敗(克隆或更新)。如何在一行bash中進行hg更新或克隆?
這必須在bash
工作,最好是如果你已經配置set -e
。
我正在尋找一個選項來對存儲庫執行hg更新,或者如果它不存在,請將其克隆。所以命令只有在出現問題時纔會失敗(克隆或更新)。如何在一行bash中進行hg更新或克隆?
這必須在bash
工作,最好是如果你已經配置set -e
。
在bash,||
析取操作,能做到這樣的場景:嘗試的第一個命令,如果失敗嘗試第二個命令,如果是失敗則返回錯誤代碼。具體到這個問題,
hg update || hg clone <source>
會嘗試更新;如果失敗,它會嘗試克隆。如果克隆失敗,整行將退出克隆的錯誤代碼。
我不希望在命令成功時在輸出中看到任何錯誤。
爲什麼命令成功時會出現錯誤?
你可以通過>/dev/null
來終止輸出;你可以通過2>/dev/null
殺死錯誤;無論是單獨使用每個組件,還是將整行括在括號中並在後面添加重定向。
cd <directory> && hg update || hg clone <source>
如果cd由於目錄不存在而失敗,那麼hg克隆將從正確的目錄級別運行。
不是'hg'特定的,但是...爲什麼你需要它在一個命令? 'A || B'應該做正確的事情,只有當'A'和'B'都失敗時纔會失敗。 (澄清,像'hg update || hg clone') –
Amadan
讓它成爲答案!仍然我希望在命令成功時不會在輸出中看到任何錯誤。儘管如此,當它失敗時看到它們是非常需要的。 – sorin
我不明白,你能解釋一下嗎?通常在回購倉庫內執行'hg update',例如, '〜/ src/myproj $ hg up'。另一方面,'hg clone'在'沒有回購時'時執行,例如'〜/ src $ hg clone http:// server/myproj myproj'。你如何設想你的組合命令被調用?哪裏? – Helgi