mkdir 在 Makefile 和终端中的不同行为
mkdir different behavior in Makefile and Terminal
我在 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'
我找不到问题。
任何建议都会有所帮助。
提前致谢。
在我看来,问题不在于 mkdir 的工作方式不同,而是您在终端中使用的 shell 与 make 用于 运行 您的命令的不同。默认情况下 make(gnu 或其他)使用 /bin/sh.
尝试将 SHELL=/bin/bash
添加到您的 makefile。
{a,b,c}
的大括号扩展是不可移植的 shell 扩展,make
使用的 /bin/sh
无法理解。你应该把目录拼写成
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 什么不是。
我在 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'
我找不到问题。
任何建议都会有所帮助。 提前致谢。
在我看来,问题不在于 mkdir 的工作方式不同,而是您在终端中使用的 shell 与 make 用于 运行 您的命令的不同。默认情况下 make(gnu 或其他)使用 /bin/sh.
尝试将 SHELL=/bin/bash
添加到您的 makefile。
{a,b,c}
的大括号扩展是不可移植的 shell 扩展,make
使用的 /bin/sh
无法理解。你应该把目录拼写成
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 什么不是。