我在Linux Ubuntu 14中遇到mkdir命令的问题。我想在同一级别创建多个目录,所以在Makefile中我做过类似的事情。
mkdir -v /opt/dir/{dir1,dir2,dir3}
,其输出类似于
mkdir: created directory '/opt/dir/{dir1,dir2,dir3}'
但是当我直接在终端上运行这个命令时,我得到了预期的结果。
'mkdir: created directory /opt/dir/dir1'
'mkdir: created directory /opt/dir/dir2'
'mkdir: created directory /opt/dir/dir3'
我无法找到问题。
任何建议都会有所帮助。 在此先感谢。
答案 0 :(得分:1)
在我看来,问题不在于mkdir的工作方式不同,而是你在终端中使用的shell与make运行命令时使用的shell不同。默认情况下make(gnu或其他)使用/ bin / sh。
尝试将SHELL=/bin/bash
添加到您的makefile中。
答案 1 :(得分:0)
使用{a,b,c}
进行大括号扩展是一种非便携式外壳扩展,/bin/sh
使用的make
无法理解。您应该按
mkdir -v /opt/dir/dir1 /opt/dir/dir2 /opt/dir/dir3
或使用
for d in dir1 dir2 dir3; do mkdir -v /opt/dir/$$d; done
这再次说明了便携式shell编程的重要性。 Know what is POSIX shell而不是。