我可以轻松地从以下位置打印某个目录中的所有文件bash:
$ cat go.sh
BASEDIR=~/Downloads
MYDIR=${BASEDIR}/ddd
for f in $(ls ${MYDIR}); do echo $f; done
$ ./go.sh
m.txt
d.txt
Run Code Online (Sandbox Code Playgroud)
当我尝试从中做类似的事情时,makefile效果不佳:
$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
for f in $(ls ${MYDIR}); do echo ${f}; done
$ make
for f in ; do echo ; done
Run Code Online (Sandbox Code Playgroud)
这是另一个不起作用的试验:
$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
for f in $(shell ls ${MYDIR}); do echo ${f}; done
$ make
for f in d.txt m.txt; do echo ; done
Run Code Online (Sandbox Code Playgroud)
Ore*_*lom 12
这是基于@Oo.oO 的编辑答案:
$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
@for f in $(shell ls ${MYDIR}); do echo $${f}; done
$ make
d.txt
m.txt
Run Code Online (Sandbox Code Playgroud)
小智 11
从文档中也几乎是“真实的方式”
TEMPLATES_DIR = ./somedir
list:
$(foreach file, $(wildcard $(TEMPLATES_DIR)/*), echo $(file);)
Run Code Online (Sandbox Code Playgroud)
也许你可以用纯粹的 Makefile 方式做到这一点?
MYDIR = .
list: $(MYDIR)/*
@echo $^
Run Code Online (Sandbox Code Playgroud)
您仍然可以像这样从 Makefile 运行命令
MYDIR = .
list: $(MYDIR)/*
for file in $^ ; do \
echo "Hello" $${file} ; \
done
Run Code Online (Sandbox Code Playgroud)
如果我是你,我宁愿不混合基于$(shell ...). 我宁愿将目录名称传递给某个脚本并在那里运行循环 - 脚本内部。
| 归档时间: |
|
| 查看次数: |
23095 次 |
| 最近记录: |