ubuntu脚本执行报错的检查思路

一、遇到的问题:

今天有朋友问我,说在CentOS上写好的脚本,在Ubuntu上没法正常使用,当时没在意,以为是权限没配置好,后来看了下,发现ubuntu跟CentOS的默认shell是不同的,如是记录下,避免以后忘记:

1、ubuntu默认的shell是连接到dash,而我们通常写的shell脚本使用的时bash。
2、bash和dash在一些方面是不兼容的。因此执行同一个脚本,两者结果不同,可能用./*sh可以执行,而sh *.sh报错。
3、Ubuntu之所以使用dash是因为其体积小,兼容性高,但是对于经常使用CentOS的人来说,这就比较悲剧,一些bash可执行的脚步在dash下不能执行了,脚本的可移植性不能保证。

二、解决方法:

1、检查脚本是否有x权限,如果有,则进行第二步
2、sudo dpkg-reconfigure dash,然后出现的界面中选择 NO
时间: 2024-10-11 12:04:21

ubuntu脚本执行报错的检查思路的相关文章

shell脚本执行报错[: 0: unary operator expected

在执行shell脚本,if判断语句报错 #!/bin/bash if [ 0 == $testNum ] then echo "Check Result:0" fi testNum使用时没有定义,无赋值是空(原本是有定义的,只是笔误写错类似tsetNum了),执行转换后实际为 if [ 0 == ] 不相等,且少[符号错误:规避如下 #!/bin/bash if [[ 0 == $testNum ]] then echo "Check Result:0" fi 使用

Ubuntu下sh *.sh使用==操作符执行报错

----<鸟哥的Linux私房菜--基础篇>学习笔记 ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash.bash和dash在一些方面是不兼容的.因此执行同一个脚本,两者结果不一样,可能用./*sh可以执行,而sh *.sh报错. 为了正确实行使用./*.h 或者  bash *.sh  或者把==换成=(不兼容部分) 也可以直接让系统不使用dash....Ubuntu之所以使用dash是因为其体积小,兼容性高,但是悲催的时,一些bash可执行的脚步在dash下不

mysql5.5 免编译安装及脚本启动报错深入

Mysql安装环境简介: 最近在做MHA.已经安装完毕heartbeat和drbd,现在准备安装Mysql. Mysql安装目录:/opt/mysql Mysql数据目录:/data/mysql 备注:/data目录实际是drbd需要同步到备节点的磁盘分区 [[email protected] src]# df -h Filesystem     Size  Used Avail Use% Mounted on /dev/sda2      9.5G  2.0G  7.1G 22% / tmpf

Ubuntu开机显示器报错

报错标题:Could not apply the stored configuration for monitors 内容是一堆显示器分辨率问题. 解决办法: 因为我现在用的是笔记本外挂一个显示器,在重启的时候,gnome-setting-deamon 会保存上一次的设置,生成一个monitors.xml的文件.在用户目录下/keaising/home/.config/monitors.xml,要解决上面的问题,最简单的办法就是删除这个monitors.xml文件,重启一下系统. 具体做法,进入

SQL server 维护计划中 “清除维护任务” 执行报错

SQL server 维护计划中 “清除维护任务” 执行报错,错误如下: 执行查询“EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2019...”失败,错误如下:“执行扩展存储过程时出错: 参数无效”.失败的原因可能有: 查询本身有问题.未正确设置 "ResultSet" 属性.未正确设置参数或未正确建立连接. 解决方法:检查路径是否为空 原文地址:https://www.cnblogs.com/YokyFitting/p/10936924

shell脚本运行报错$&#39;\r&#39;: command not found

执行个别shell测试脚本运行报错$'\r': command not found 考虑到可能是windows与Linux的换行符不同的原因(windows是\r\n,Linux是\n)造成的,但是又不想一个个替换. 可以使用如下命令来解决: # vi 脚本名 命令行模式下输入: :set ff=unix :wq 退出即可 shell脚本运行报错$'\r': command not found 原文地址:https://www.cnblogs.com/abclife/p/12604441.htm

sql执行报错--This version of MySQL doesn&#39;t yet support &#39;LIMIT &amp; IN/ALL/ANY/SOME subquery&#39;

问题: 不支持使用 LIMIT 子句的 IN/ALL/ANY/SOME 子查询,即是支持非 IN/ALL/ANY/SOME 子查询的 LIMIT 子查询. 解决: 将语句:select * from table where id in (select id from table limit 0,10) 变更为:select * from table where id in (select t.id from (select * from table limit 0,10)as t) sql执行报

salt执行报错一例

执行报错: 查看服务端日志: 认证有问题 重新认证吧!!! minion端: [[email protected] ~]# cd /etc/salt/[[email protected] salt]# lsminion minion.d minion_id pki[[email protected] salt]# rm -rf pki/ [[email protected] salt]# /etc/init.d/salt-minion restart master端: [[email prote

oracle创建包后执行报错:object omgmig.test_package is invalid.

今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起来都正常对吧..但是就是会报错 --包声明 create package omgmig.test_package as procedure show1; end omgmig.test_package; --包体 create package body omgmig.test_package as