有时候为了控制输出字体的颜色和背景,我们会使用echo -e来改变终端字体背景和字体颜色,在makefile里面使用了如下语句
echo -e "\033[44;37;1m +++ Compiling $i...\033[0m";
执行make时候,屏幕有如下打印
-e +++ Compiling temp_dir/...
很奇怪这里为什么会有-e的显示?
自己在网上搜了一些提示,主要是这个链接给的提示和解决方法。http://blog.csdn.net/benkaoya/article/details/12410295
因为make的规则都是shell命令,所以make在执行makefile规则时候,会用到shell, 也即是说,这个是shell打印出来的。
但是在Shell命令行输入上述内容,执行结果没有-e回显
root@ubuntu:~/app$ echo -e "\033[44;37;1m +++ Compilingtemp_dir...\033[0m"
+++ Compiling temp_dir...
root@ubuntu:~/app$ echo $SHELL
/bin/bash
系统shell使用的是/bin/bash
再看看Makefile默认是使用的什么shell执行的
make一般是使用环境变量SHELL中所定义的系统Shell来执行命令,默认情况下使用UNIX的标准Shell——/bin/sh来执行命令。
但在MS-DOS下有点特殊,因为MS-DOS下没有SHELL环境变量,当然你也可以指定。如果你指定了UNIX风格的目录形式,首先,
make会在SHELL所指定的路径中找寻命令解释器,如果找不到,其会在当前盘符中的当前目录中寻找,如果再找不到,
其会在PATH环境变量中所定义的所有路径中寻找。MS-DOS中,如果你定义的命令解释器没有找到,其会给你的命令解释器加上诸如“.exe”、“.com”、“.bat”、“.sh”等后缀。
在makefile的规则里面加上了打印语句 echo $SHELL, 通过make -n执行如下
root@ubuntu:~/app$ make -n
for i in driver/temp_dir/; do \
echo/bin/sh
echo -e "\033[44;37;1m +++ Compiling $i...\033[0m"; \
make -C $i || exit $?; \
done
可以看到makefile默认使用的shell是/bin/sh, 而实际/bin/sh是执行dash的链接文件
root@ubuntu:~/app$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 2012 /bin/sh -> dash
如果想知道makefile用期望的shell 来解释命令,可以通过修改makefile环境变量来实现,
在makefile最前面加上SHELL = /bin/bash,即可指定使用bash。
阅读(2801) | 评论(0) | 转发(0) |