免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1336 | 回复: 0
打印 上一主题 下一主题

问个奇怪的shell问题(关于父子shell进程的) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-19 19:44 |只看该作者 |倒序浏览
all:
        for dir in $(subdir) ; do \
        ./mkall $(VER_ID) $(SERIES); \
        cp -f $(TARGET_DIR)/images/*_boot.bin $(TARGET_DIR)/release/$$dir/cynot_boot.bin; \
        cp -f $(TARGET_DIR)/release/*_firmware.bin $(TARGET_DIR)/release/$$dir/cynot_ver; \
        done
       
mkall脚本中
中有
./mklinuzbin

if [ $? != 0 ]
then
        echo "Error: Create vmlinuz.bin  failure!"
        exit 1       
fi

mklinuzbin脚本中
make -C $LINUX_KERNEL_PATH

if [ $? != 0 ]
then
        echo "Error:Compile linux kernel failure!"
        exit 1
fi
报错是
Error:Compile linux kernel failure!
Error: Create vmlinuz.bin  failure!
$(TARGET_DIR)/images和$(TARGET_DIR)/release目录在编之前版本的时候里面已经有了东西

Error:Compile linux kernel failure!
Error: Create vmlinuz.bin  failure!

在执行mklinuzbin脚本的时候弹出,然后再是mkall脚本弹出
这些都没问题,关键是在all的makefile里面cp动作执行了

很奇怪,不是all目标下面的for语句的话应该是在一个子shell里面的怎么会mkall失败后,cp
动作会继续执行呢?

我做了几个实验,想要规避这个问题,
第一次:

all:
        for dir in $(subdir) ; do \
        ./mkall $(VER_ID) $(SERIES); \
        if [ $? != 0  ] ; \
        then \
        echo "hahahaha"; \
        exit 1; \
        fi \
        cp -f $(TARGET_DIR)/images/*_boot.bin $(TARGET_DIR)/release/$$dir/cynot_boot.bin; \
        cp -f $(TARGET_DIR)/release/*_firmware.bin $(TARGET_DIR)/release/$$dir/cynot_ver; \
        done
       
我让mkall出错
结果有些时候是$?是空值
有些时候就直接从mkall那边退出了,不会进行$?的判断,百思不得其解

我的问题是如果在就象all目标一样都用\续行的话,这些目录应该是在一个子shell里面的
在这里./mkall会不会新起一个子shell呢

还有执行一个脚本是不是相当于起一个子shell?子shell再执行脚本中的命令
如果在脚本中再执行一个脚本,比如mkall脚本中执行个./linuzbin
这样是不是相当于起一个子shell呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP