質問

った場合があり方を実施 trap GNU make, に類似する組み込 BASH?

ユーザの場合、プレス CTRL-C, 場合、または make そのものに失敗した(非ゼロ出口)から呼び、特定のターゲットをクリックします。

役に立ちましたか?

解決

No.GNU makeの信号の取り扱いて葉で多くを望まれるところである。内からの信号のハンドラで機能 printf ない安全なと呼ばれる内部からの信号ハンドラです。れによってこの問題は、例えば .DELETE_ON_ERROR ルールはない場合は実行され stderr はリダイレクトされ stdout.

例えば、CentOS7.4ボックス

  1. は以下のとお Makefile:

    .DELETE_ON_ERROR:
    
    foo:
            touch $@
            sleep 10
    
  2. で開 vim:make,

  3. では、あなたに眠っている、 Ctrl-C

Vim/印刷

Press ENTER or type command to continue
touch foo
sleep 10
^C
shell returned 130

Interrupt: Press ENTER or type command to continue

作が送信された割り込み信号が foo 引き続き存在します。

他のヒント

この時期には,GNU makeないネイティブです。

があり信頼性の回避策は:

.PHONY: internal-target external-target

external-target:
  bash -c "trap 'trap - SIGINT SIGTERM ERR; <DO CLEANUP HERE>; exit 1' SIGINT SIGTERM ERR; $(MAKE) internal-target"

internal-target:
  echo "doing stuff here"

この漁獲物を中断、終端およびゼロ口コードです。

注意 $(MAKE) でcmdlineオーバーライド、オプション取得に渡されるsubmake.

にトラップ:

  • 明確なトラップハンドラでは(-)
  • の清掃活動
  • 口が非ゼロの終了ステータスで構築の自動化ツールに失敗した。

DELETE_ON_ERRORまないディレクトリを、この鍵とな洗浄後 mktemp -d, 例えば

交換 <DO CLEANUP HERE> 有効なCMD.

基本的な例には十分と思われる@ kevinfの答えを簡略化します:

run:
    bash -c "trap 'docker-compose down' EXIT; docker-compose up --build"

(この例では、理由のためである:docker-compose upは言ってない。

  

とき   コマンドが終了すると、すべてのコンテナが停止されます。

しかし、それはrmのような停止の容器は、そうあなたはまだdocker run --rmでそれらを見ることができるでしょうdocker ps -aしません。)

メイクは、それをサポートしていませんが、あなたは似た何かを達成することができますBASHのトリックを使用します。

default: complete

complete: do_mount
        echo "Do something here..."

do_mount:
        mkdir -p "$(MOUNTPOINT)"
        ( while ps -p $$PPID >/dev/null ; do \
                sleep 1 ; \
        done ; \
        unmount "$(MOUNTPOINT)" \
        ) &
        mount "$(MOUNTSOURCE)" "$(MOUNTPOINT)" -o bind

「アンマウント」「作る」の後に実行されます完了します。あなたは、ビルド時に発生する可能性がクリーンアップ操作しようとしているが、「作る」終了時に正常にクリーンアップされていない場合、これは通常、満足のいく解決策です。

はありません。私の知る限りではそのような機能はありません。

メイクは、リターンコードを生成します。私の知る限り、今思い出すことができるように、それは(ドキュメントをチェックしてください)、障害のために成功、2 0を返します。あなたは、たとえば、シェルスクリプト内で作るラップするためにしたがって、それは十分だろう?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top