다음과 같은 디렉토리 구조가 있습니다.
`-- dev
|-- example-object
| |-- example-object.tex
| `-- example-template
| |-- example-template.tex
| `-- instances
| `-- example-instance.tex
`-- example-object2
|-- example-object2.tex
`-- example-template2
|-- example-template2.tex
`-- instances
`-- example-instance2.tex
다음 파일만 포함된 디렉터리를 원합니다.
`-- src
|-- xcv.example-object.tex
|-- xcv.example-object.example-template.tex
|-- xcv.example-object.example-template.example-instance.tex
|-- xcv.example-object2.tex
|-- xcv.example-object2.example-template2.tex
`-- xcv.example-object2.example-template2.example-instance2.tex
이 bash 스크립트는 내가 원하는 작업을 수행하지만 Makefile에 복사/붙여넣기하는 것 외에 Make의 기능을 사용하여 동일한 작업을 수행하는 방법을 모르겠습니다.
mkdir -p src/
dest=$(pwd)/src
for object in $(find dev ! -path dev -type d -maxdepth 1); do
oname=$(basename "${object}")
echo cp "${oname}.tex" "${dest}"/xcv."${oname}".tex
for template in $(find "${object}" ! -path "${object}" -type d -maxdepth 1); do
tname=$(basename "${template}")
echo cp "${tname}.tex" "${dest}"/xcv."${oname}"."${tname}".tex
for instance in $(find "${template}"/instances -type f); do
iname=$(basename "${instance}")
echo cp "${iname}.tex" "${dest}"/xcv."${oname}"."${tname}"."${iname}"
done
done
done
답변1
새 셸에서 각 줄을 bash
실행할 수 없으므로 컨텍스트가 손실됩니다. Makefile
변수는 변수로도 평가됩니다 make
. 대신 코드를 별도의 bash
스크립트에 저장하고 에서 실행하는 것은 스크립트를 Makefile
남용 bash
하거나 작업을 수행할 make
가치가 없습니다 .
정말로 그것을 당신의 것에 넣고 싶다면 Makefile
, 그것을 한 줄로 만들고 변수에서 $를 이스케이프해야 합니다.
작동하지 않는 예:
$ cat Makefile
test:
VAR="YES";
echo "x${VAR}";
$ make
VAR="YES";
echo "x";
x
탈출하다:
$ cat Makefile
test:
VAR="YES"; \
echo "x$${VAR}";
jakuje@E6430:/tmp/test$ make
VAR="YES"; \
echo "x${VAR}";
xYES