./build.sh: 9: Syntax error: “(“ unexpected

这个错误通常表示脚本的语法与当前Shell解释器不兼容。在您的脚本中,第9行定义了一个函数:

function chown_pseudo_root()

这是一种Bash Shell中定义函数的语法,但您的脚本的首行是:

#!/bin/sh

这意味着脚本被指定使用 /bin/sh 作为Shell解释器。在某些系统(如Ubuntu)中,/bin/sh 实际上是指向 dash Shell 的,而 dash 不支持 function 关键字定义函数。


解决方案

您可以通过以下方法解决此问题:

方法1:将脚本改为使用 Bash

如果可以使用 bash,修改脚本的第一行为:

#!/bin/bash

这样,脚本会使用 Bash 解释器执行,能够正确识别 function 关键字。

完整脚本修改后如下:

#!/bin/bash
# 一键编译生成烧写包

TOP_PATH=$(dirname $(pwd))
SDK_PATH=$TOP_PATH/SIM8810_SDK_OCPU-2025-1-1
echo "top_path=$TOP_PATH sdk_path=$SDK_PATH"

# 先批量使用ts_fakeroot增加一下root权限
function chown_pseudo_root()
{
    echo "start chown_pseudo_root" \
    && ../ts_fakeroot chown -R root:root ./rootfs_pvm \
    && ../ts_fakeroot chown -R root:root ./mocar*
}

chown_pseudo_root

然后重新运行脚本:

./build.sh

方法2:使用兼容 sh 的函数定义方式

如果必须使用 /bin/sh,需要改用 dash 支持的函数定义方式,即不使用 function 关键字,而直接定义函数名称并加上括号 ()

修改脚本如下:

#!/bin/sh
# 一键编译生成烧写包

TOP_PATH=$(dirname $(pwd))
SDK_PATH=$TOP_PATH/SIM8810_SDK_OCPU-2025-1-1
echo "top_path=$TOP_PATH sdk_path=$SDK_PATH"

# 先批量使用ts_fakeroot增加一下root权限
chown_pseudo_root() {
    echo "start chown_pseudo_root" \
    && ../ts_fakeroot chown -R root:root ./rootfs_pvm \
    && ../ts_fakeroot chown -R root:root ./mocar*
}

chown_pseudo_root

然后重新运行脚本:

./build.sh

方法3:直接使用 bash 执行脚本

如果不方便修改脚本内容,也可以直接告诉系统用 bash 来执行脚本,而不是 /bin/sh

bash ./build.sh

此方法对原始脚本兼容,但建议从长远角度出发,最好修改脚本的Shebang(即首行),明确指定使用 bash


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值