Xilinx社区
首页 > Kevin专栏 > bash和dash的区别导致petalinux脚本在ubuntu下运行异常解决方法
Kevin专栏
bash和dash的区别导致petalinux脚本在ubuntu下运行异常解决方法
来源:  时间:2015-01-23  浏览量:1099

前几天在Virtualbox+Ubuntu环境下搞定了ISE的安装,紧接着,就可以把petalinux拷贝到ubuntu底下,继续做XUP的petalinux的几个实验。 

做到实验1.3,出问题了。 

当我准备建立一个最简单的mytest交叉编译工程的时候,按照实验指导书上的写法,只需要这样就可以了:

petalinux-new-app mytest

这是一个脚本,把交叉编译所需要的Makefile以及工具链的路径什么的帮你设好,这样,你就可以直接make可。 

当我兴致博博地运行这个脚本的时候,却被当头一棒

24: function: not found

仔细看petalinux-new-app 的第24行,没什么问题啊,百思不得其解。 第24行是这样滴:

function usage {

第一行是这样滴:

#!/bin/sh

不过,这两行代码对我来讲,都有些怪怪的感觉。 因为,我一般喜欢直接写明到底是bash还是其他的,用sh这种东东总感觉隔了一层。 另外,在bash里面写函数,固然写funtion xxx {也没错,但一般写成这样

 function (){

因此,怀疑/bin/sh中有问题, 果然,ls /bin/sh -al 以后,发现sh指向的不是bash,而是dash. 

dash据说更快,但是功能没有bash全,ubuntu为了提高启动速度,从6.10开始,就把缺省的shell改成了dash, 但带来了广大程序员的痛骂,因为,dash的功能也弱一些,不少非posix的语法并不支持。 

最暴力的方法当然是直接把/bin/sh的软链接改到bash中, 但是,有优雅一些的方法,

sudo dpkg-reconfigure dash 

 出现菜单问你是否要dash的时候,选no就可以了。 

再次检查一下, ls /bin/sh -al  发现软链接指向/bin/bash就可以了。 

讨论:

1. 当然,还有一个办法就是直接把脚本的第一行改为

#/bin/bash

就可以了。 但是,牵扯到的脚本好几十个,改起来还有点麻烦的。 

2.  既然function xxxx {} 这种语法并不符合posix要求, 那最好都改成 xxx() {}这种声明方法,以便有更多的兼容性。 这种改动工作量更大些


热点文章
精选视频
推荐资源

中国授权培训机构

北京 电话:(010)82757632
      (010) 62192881
深圳 电话:(0755)86186715
武汉 电话:(027)61389792
成都 电话:(028)80821007
南京 电话:(025)66022032
西安 电话:(029)82230498
邮箱:sales@e-elements.com

中国授权经销商

香港 电话:(852)22127848
北京 电话:(010)84148118
成都 电话:(028)86528262
上海 电话:(021)33678387
深圳 电话:(0755)26584925
武汉 电话:(027)87322806
邮箱:china@avent.com
深圳 电话:(0755)26743210
上海 电话:(021)51696680
北京 电话:(010)51726678
成都 电话:(028)85139576
武汉 电话:(027)87690155
邮箱:
xilinx_enquiry@comtech.com.cn

社区主办


《电子产品世界》杂志社

内容提供


    赛灵思公司

Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052