2014-07-11 40 views
3

換句話說,我要製作成一個班輪這一點:猛砸一個班輪 - 測試文件是否存在和來源,如果它的其他出口,錯誤

test -e ${MY_HOME}/setup-env.sh || { echo "ERROR: MY_HOME not defined or does not contain srtup-env.sh" 1>&2 ; exit 1; } 

    . ${MY_HOME}/setup-env.sh 
+0

可以在一行上做到這一點,但爲什麼你想要?爲此使用函數將更易於閱讀,並且每次使用時都不需要打字。 –

+1

對我來說,真正的單線是那些通過一個不間斷的命令實例完成所需的任務。而且我看到那些使用分隔符的像';'沒有資格被稱爲這樣的。 – konsolebox

回答

6

您可以使用這一個班輪:

[[ -e "${MY_HOME}/setup-env.sh" ]] && source "${MY_HOME}/setup-env.sh" || { echo "ERROR: MY_HOME not defined or does not contain srtup-env.sh" 1>&2 ; exit 1; } 
+1

如果'source「$ {MY_HOME} /setup-env.sh」'以非零狀態碼結束,這也會運行該消息。 – konsolebox

+0

是的,這是很好的一點,我認爲這是所有這一切的一個陷阱。很明顯,源代碼「$ {MY_HOME} /setup-env.sh」不能在子shell中完成。 – anubhava

2
[[ -e ${MY_HOME}/setup-env.sh ]] && { source "${MY_HOME}/setup-env.sh"; exit; }; echo "ERROR: MY_HOME not defined or does not contain setup-env.sh" >&2; exit 1 

或者,如果非擊:

test -e "${MY_HOME}/setup-env.sh" && { . "${MY_HOME}/setup-env.sh"; exit; }; echo "ERROR: MY_HOME not defined or does not contain setup-env.sh" >&2; exit 1 

它實際上對我來說並不是一蹴而就的,而只是一種濃縮的形式。