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)

答え2

私が見る最初の質問。

あなたはあなたの命令を持っています

cd somewhere
do something

make は行ごとに新しいシェルを作成します。したがって、シェルを作成し、このシェルの現在の作業ディレクトリを変更し、シェルを閉じて、新しいシェルを作成して、操作を実行します。これが今あなたが望むものです。

あなたはする必要があります

cd somewhere; do something

つまり

htmlproofer:
    cd $(TEMP_DIR_HTMLPROOF); $(WGET) --recursive --html-extension --convert-links --domains localhost --no-parent localhost:8000 - $(HTMLPROOFER) . ;echo $(TEMP_DIR_HTMLPROOF)
    rm -r $(TEMP_DIR_HTMLPROOF)

noteはcd ..シェルスクリプトで誤った操作を実行しますが、ここでは何もしません(上記を参照)、必要はありません(上記を参照)。 pushdとpoptが良いですが、シェルスクリプトではこれがcd -あなたがしたいことです。

関連情報