웹사이트를 확인하려고 하는데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)
임시 폴더를 생성하고 전체 웹 사이트를 다운로드한 후 html-proofer를 사용하여 검사를 수행하고 마지막으로 임시 폴더 삭제를 시도합니다. 어떤 이유로 폴더를 삭제할 수 없습니다.
운이 없더라도 시도했지만 rm -rf
임시 폴더는 항상 거기에 있지만 내용은 없습니다.
생성된 임시 폴더의 이름이 다음과 같다고 가정합니다. /tmp/tmp.l21wiSkYdz
명령을 실행한 후 wget
다운로드한 웹 사이트가 포함되지만 /tmp/tmp.l21wiSkYdz/localhost+8000
이후에는 rm
빈 폴더로 유지됩니다 /tmp/tmp.l21wiSkYdz
.
내가 작동하게 한 유일한 방법은 다음 rm
과 같이 대화식으로 사용하는 것입니다 rm -ir
.
임시 폴더를 완전히 삭제하는 방법이나 삭제를 피할 수 있는 이유에 대한 아이디어가 있습니까?
몇 가지 참고사항:
.ONESHELL:
동일한 서브셸에서 각 줄을 실행합니다.- 앞의 대시를 사용하면
html-proofer
임시 폴더를 삭제하지 않고 스크립트 종료 가능성을 무시할 수 있습니다. - 사용세게 때리다
SHELL := /bin/bash
답변1
@RakeshSharma가 의견에서 지적했듯이 단일 변수 할당을 사용했기 =
때문에 실행 시간으로 연기되어 두 번 실행되었습니다.
스크립트가 두 번째로 변수에 액세스하려고 시도하면 다시 실행되어 다른 임시 폴더가 생성됩니다.
사용하기 =
위해 변경:=
즉각적인확장명이므로 임시 폴더를 한 번 생성합니다.
~에서
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와 popd가 더 좋지만 쉘 스크립트에서는 이것이 cd -
당신이 하고 싶은 일입니다.