的一系列動作的一個makefile
單獨線通常在單獨的子shell中執行。要編碼你所追求的,然後:
all:
if grep term log*; \
then echo found; \
else echo not found; \
fi
這是一個單一的命令;它直接測試grep
的退出狀態。請注意自由使用分號碼;這是必要的,因爲它在傳遞到shell時會變得平坦。請注意,-
不是必需的;整個語句以狀態0退出,因爲echo
命令之一被執行,成功並且是從子shell返回的狀態。但是還有另一部分的訣竅。 IIRC,腳本調用與/bin/sh -e
因此腳本在所述第一誤差(非零)從外殼命令狀態退出 - 除了在明確的條件語句,如if
。
如果你想明確地捕捉grep
狀態(如果只是爲了確保它正在做的權利),那麼:
all:
-grep term log*; \
status=$$?; echo $$status; \
if [ $$status = 0 ]; \
then echo found; \
else echo not found; \
fi
你可能需要-
這個時間,因爲grep
並不像部分執行的shell條件和非零退出狀態可能會觸發-e
處理。我不建議這樣做。
您可能注意到,你可以在一個動作做cd
命令和因爲每個動作單獨執行,你必須重複做。
install: ${PROG}
cd ${INSTBIN}; ${RM_F} ${PROG}
${CP} ${PROG} ${INSTBIN}
cd ${INSTBIN}; ${CHOWN} ${OWNER}:${GROUP} ${PROG}; ${CHMOD} ${PERMS} ${PROG}
是的,你可以以不同的方式做 - 我正在展示一個觀點,並不主張安裝程序的風格。
哦,我一直在尋找這個!創造了我的一天。謝謝 – lzap