別々のラインが正常です別々のサブシェルで実行されます。あなたが何をしているのかをコードするには、
all:
if grep term log*; \
then echo found; \
else echo not found; \
fi
これは1つのコマンドです。 grep
の終了ステータスを直接テストします。セミコロンの自由な使用に注意してください。これはシェルに渡されるとすべてが平坦になるため必要です。 -
は不要であることにも注意してください。ステートメントは全体として、echo
コマンドの1つが実行され、成功し、それがサブシェルから戻された状態であるために状態0で終了します。しかし、トリックにはもう一つの部分があります。 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
ので、この時間を必要としますシェルの条件付きで0以外の終了ステータスの場合は、-e
の処理がトリガーされる可能性があります。私はこれと一緒にfutzingをお勧めしません。
アクション内でcd
コマンドを実行でき、各アクションが別々に実行されるため、繰り返し実行する必要があることに注意してください。
install: ${PROG}
cd ${INSTBIN}; ${RM_F} ${PROG}
${CP} ${PROG} ${INSTBIN}
cd ${INSTBIN}; ${CHOWN} ${OWNER}:${GROUP} ${PROG}; ${CHMOD} ${PERMS} ${PROG}
はい、あなたは違うことができます - 私は、プログラムをインストールするスタイルを提唱していない点を実証しています。
ああ私はこれを探しています!私の一日を作った。ありがとう – lzap