ウェブサイトを確認しようとしています。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 -
あなたがしたいことです。