解决Linux下编译.sh文件报错 “[: unexpected operator”

本文介绍了解决在Linux环境下使用.sh文件编译工程时遇到的错误问题,详细解释了Ubuntu默认使用dash而非bash作为解释器导致的问题,并提供了解决方案,包括将.sh文件的解释器更改为bash的方法。

问题:

在Linux通过编译 .sh文件来生成工程,提示报错:
在这里插入图片描述
然后我就表示很费解,查看我的.sh文件,其中有很多的[] ,都是这些报错,可是之前一直没问题。

后来发现,因为Ubuntu默认的sh是连接到dash的,又因为dash跟bash的不兼容所以出错了.执行时可以把sh换成bash文件名.sh来执行.成功.dash是什么东西,查了一下,应该也是一种shell,貌似用户对它的诟病颇多。

修改sh默认连接到bash的一种方法:

sudo dpkg-reconfigure dash

选择no 即可!

再次编译!通过!搞定!

这个是什么原因 administrator@administrator-pc:~/BHD-713/irdma-1.2.21$ sudo ./build.sh 输入密码 ./build.sh: 15: [: unexpected operator make: 进入目录“/usr/src/linux-headers-5.10.0-9-generic” make: 离开目录“/usr/src/linux-headers-5.10.0-9-generic” ./build.sh: 98: [: unexpected operator make: 进入目录“/usr/src/linux-headers-5.10.0-9-generic” CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/hw.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/cm.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/ctrl.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/hmc.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/pble.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/puda.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/uk.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/utils.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/uda.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/ws.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/trace.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/i40iw_if.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/i40iw_hw.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/irdma_if.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/icrdma_hw.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/configfs.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/virtchnl.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/irdma_kcompat.o CC [M] /home/administrator/BHD-713/irdma-1.2.21/src/irdma/debugfs.o /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.c:580:15: error: initialization of ‘int (*)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *)’ {aka ‘int (*)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, unsigned int *, struct netlink_ext_ack *)’} from incompatible pointer type ‘int (*)(struct devlink *, struct netlink_ext_ack *)’ [-Werror=incompatible-pointer-types] 580 | .reload_up = irdma_devlink_reload_up, | ^~~~~~~~~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.c:580:15: note: (near initialization for ‘irdma_devlink_ops.reload_up’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.c:581:17: error: initialization of ‘int (*)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *)’ {aka ‘int (*)(struct devlink *, _Bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *)’} from incompatible pointer type ‘int (*)(struct devlink *, bool, struct netlink_ext_ack *)’ {aka ‘int (*)(struct devlink *, _Bool, struct netlink_ext_ack *)’} [-Werror=incompatible-pointer-types] 581 | .reload_down = irdma_devlink_reload_down, | ^~~~~~~~~~~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.c:581:17: note: (near initialization for ‘irdma_devlink_ops.reload_down’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c: In function ‘irdma_query_port’: /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:112:46: error: passing argument 2 of ‘irdma_get_eth_speed_and_width’ from incompatible pointer type [-Werror=incompatible-pointer-types] 112 | irdma_get_eth_speed_and_width(SPEED_100000, &props->active_speed, | ^~~~~~~~~~~~~~~~~~~~ | | | u16 * {aka short unsigned int *} /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:61:63: note: expected ‘u8 *’ {aka ‘unsigned char *’} but argument is of type ‘u16 *’ {aka ‘short unsigned int *’} 61 | static void irdma_get_eth_speed_and_width(u32 link_speed, u8 *active_speed, | ~~~~^~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c: In function ‘irdma_reg_user_mr’: /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:2846:23: error: passing argument 1 of ‘ib_umem_get’ from incompatible pointer type [-Werror=incompatible-pointer-types] 2846 | region = ib_umem_get(udata, start, len, access); | ^~~~~ | | | struct ib_udata * In file included from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.h:35, from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:3: ./include/rdma/ib_umem.h:74:17: note: expected ‘struct ib_device *’ but argument is of type ‘struct ib_udata *’ 74 | struct ib_umem *ib_umem_get(struct ib_device *device, unsigned long addr, | ^~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c: At top level: /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4310:14: error: initialization of ‘int (*)(struct ib_mw *, struct ib_udata *)’ from incompatible pointer type ‘struct ib_mw * (*)(struct ib_pd *, enum ib_mw_type, struct ib_udata *)’ [-Werror=incompatible-pointer-types] 4310 | .alloc_mw = irdma_alloc_mw, | ^~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4310:14: note: (near initialization for ‘irdma_dev_ops.alloc_mw’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4313:15: error: initialization of ‘int (*)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *)’ from incompatible pointer type ‘int (*)(struct ib_ah *, struct rdma_ah_attr *, u32, struct ib_udata *)’ {aka ‘int (*)(struct ib_ah *, struct rdma_ah_attr *, unsigned int, struct ib_udata *)’} [-Werror=incompatible-pointer-types] 4313 | .create_ah = irdma_create_ah, | ^~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4313:15: note: (near initialization for ‘irdma_dev_ops.create_ah’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4320:16: error: initialization of ‘int (*)(struct ib_pd *, struct ib_udata *)’ from incompatible pointer type ‘void (*)(struct ib_pd *, struct ib_udata *)’ [-Werror=incompatible-pointer-types] 4320 | .dealloc_pd = irdma_dealloc_pd, | ^~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4320:16: note: (near initialization for ‘irdma_dev_ops.dealloc_pd’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4323:16: error: initialization of ‘int (*)(struct ib_ah *, u32)’ {aka ‘int (*)(struct ib_ah *, unsigned int)’} from incompatible pointer type ‘void (*)(struct ib_ah *, u32)’ {aka ‘void (*)(struct ib_ah *, unsigned int)’} [-Werror=incompatible-pointer-types] 4323 | .destroy_ah = irdma_destroy_ah, | ^~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4323:16: note: (near initialization for ‘irdma_dev_ops.destroy_ah’) /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4324:16: error: initialization of ‘int (*)(struct ib_cq *, struct ib_udata *)’ from incompatible pointer type ‘void (*)(struct ib_cq *, struct ib_udata *)’ [-Werror=incompatible-pointer-types] 4324 | .destroy_cq = irdma_destroy_cq, | ^~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4324:16: note: (near initialization for ‘irdma_dev_ops.destroy_cq’) In file included from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/irdma_kcompat.h:66, from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.h:46, from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:3: /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c: In function ‘irdma_ib_register_device’: /home/administrator/BHD-713/irdma-1.2.21/src/irdma/ubuntu_kcompat.h:36:45: error: too few arguments to function ‘ib_register_device’ 36 | #define kc_ib_register_device(device, name) ib_register_device(device, name) | ^~~~~~~~~~~~~~~~~~ /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:4632:8: note: in expansion of macro ‘kc_ib_register_device’ 4632 | ret = kc_ib_register_device(&iwdev->ibdev, name); | ^~~~~~~~~~~~~~~~~~~~~ In file included from ./include/rdma/ib_mad.h:15, from ./include/rdma/ib_smi.h:13, from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.h:29, from /home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.c:3: ./include/rdma/ib_verbs.h:2785:5: note: declared here 2785 | int ib_register_device(struct ib_device *device, const char *name, | ^~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors make[1]: *** [scripts/Makefile.build:286:/home/administrator/BHD-713/irdma-1.2.21/src/irdma/verbs.o] 错误 1 make[1]: *** 正在等待未完成的任务.... cc1: all warnings being treated as errors make[1]: *** [scripts/Makefile.build:286:/home/administrator/BHD-713/irdma-1.2.21/src/irdma/main.o] 错误 1 make: *** [Makefile:1848:/home/administrator/BHD-713/irdma-1.2.21/src/irdma] 错误 2 make: 离开目录“/usr/src/linux-headers-5.10.0-9-generic”
05-25
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值