Makefileのrm -rはディレクトリを削除しません

Makefileのrm -rはディレクトリを削除しません

ウェブサイトを確認しようとしています。HTML校正器ルールを使用Makefileし、最後に一時フォルダを削除します。

これを行うには、あるコンソールでサーバーを起動し、別のコンソールで次のルールを実行します。

SHELL := /bin/bash
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
VIRTUALENV_BIN=~/.virtualenvs/example/bin
PYTHON=$(VIRTUALENV_BIN)/python
PIP=$(VIRTUALENV_BIN)/pip
MANAGE=$(PYTHON) workouts/manage.py

WGET=/usr/bin/wget
HTMLPROOFER=/usr/local/bin/htmlproofer
TEMP_DIR_HTMLPROOF=$(shell mktemp -d)
.ONESHELL:
htmlproofer:
    cd $(TEMP_DIR_HTMLPROOF)
    $(WGET) --recursive --html-extension --convert-links --domains localhost --no-parent localhost:8000
    - $(HTMLPROOFER) .
    echo $(TEMP_DIR_HTMLPROOF)
    cd ..
    rm -r $(TEMP_DIR_HTMLPROOF)

一時フォルダを作成し、Webサイト全体をダウンロードしたら、html-prooferを使用してスキャンを実行し、最後に一時フォルダを削除しようとします。何らかの理由でフォルダを削除できません。

運がなくても試してみましたが、一時rm -rfフォルダは常にそこにありますが、内容はありません。

作成された一時フォルダーの名前が次のとおりです。/tmp/tmp.l21wiSkYdzコマンドの実行後にwgetダウンロードしたWebサイトが含まれますが、/tmp/tmp.l21wiSkYdz/localhost+8000その後はrm空のフォルダに残ります/tmp/tmp.l21wiSkYdz

私が動作させる唯一の方法は、次のようrmにインタラクティブに使用することですrm -ir

一時フォルダを完全に削除する方法や削除を回避できる理由についてのアイデアはありますか?

いくつかの注意:

  • .ONESHELL:同じサブシェルで各行を実行します。
  • 前のダッシュを使用すると、html-proofer一時フォルダを削除せずにスクリプトの終了の可能性を無視できます。
  • 使用強く打つ SHELL := /bin/bash

ベストアンサー1

@RakeshSharmaがコメントで指摘したように、単一変数の割り当てを使用した=ので、実行時間として延期され、2回実行されました。

スクリプトが2番目に変数にアクセスしようとすると、再実行され、別の一時フォルダが作成されます。

使用する=ために変更:=即時拡張子なので一時フォルダを一度作成します。

~から

TEMP_DIR_HTMLPROOF=$(shell mktemp -d)

これに関して

TEMP_DIR_HTMLPROOF:=$(shell mktemp -d)

おすすめ記事