Позвольте мне сначала быстро написать Makefile как витрина:Один дочерний процесс за цикл в make?
#!/bin/make -f
folders := $(shell find -mindepth 1 -maxdepth 1 -type d -print)
make_dir:
@mkdir -p "test0"
pwd_test:
@cd "test0" && pwd
@pwd
pwd_all:
@for f in $(folders); do \
cd "$${f}" && pwd; \
pwd; \
cd ..; \
done
Сначала делают make make_dir
, а затем увидеть различные результаты:
➜ so make pwd_test
/data/cache/tmp/so/test0
/data/cache/tmp/so
➜ so make pwd_all
/data/cache/tmp/so/test0
/data/cache/tmp/so/test0
Вы видите, что в течение цикла необходимо сделать cd ..
, По-видимому, теперь нет никакого дочернего процесса для команды cd X && pwd
, в то время как это нормально. Является ли это поведение специфичным для создания или специфики моей оболочки?
Короткий ответ (спасибо ниже): ** для цикла ** является частью оболочки, которую вы используете. Так что make не имеет понятия о ** для циклов **. –