linux切换bash dash,bash和dash的区别导致petalinux脚本在ubuntu下运行异常解决方法

前几天在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() {}这种声明方法,以便有更多的兼容性。 这种改动工作量更大些

过几天写封邮件让John Williams改一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值