Ubuntu20.04 LTS执行Shell脚本出现Bad substitution错误
问题描述
在 Windows 10 自带的 Ubuntu 20.04 子系统终端,执行 Shell 脚本时出现 Bad substitution 错误:
1 | ➜ ~ sh +x tt.sh |
Shell 脚本是从服务器上下载下来的,在服务器上是可以正确执行的,服务器系统为 CentOS 7。
解决方法
第一感觉应该是该 Shell 脚本在 Ubuntu、CentOS 两个系统不兼容的关系。
打开脚本文件,跟踪出错位置(第 11 行),定位到这行代码 day=${dt:6}
。
查了 Ubuntu 官方文档,发现从 Ubuntu 6.10 开始,系统默认 Shell (/bin/sh) 由 bash shell 更改为 dash shell 了,原因是 dash shell 更轻量,运行更快。
查看 /bin/sh 在 Ubuntu 系统的链接:
1 | ➜ ~ ll /usr/bin/ |
而在服务器 CentOS 系统,链接的是 bash:
1 | [hadoop@bigdata ~]$ ll /usr/bin/ |
为了在本地开发机器能够兼容在服务器上执行的脚本文件,这里需要将 Ubuntu 的 /bin/sh 的默认链接更换为 bash,文档给出的方案是在终端执行以下命令,然后选择 < No > 即可:
1 | ➜ ~ sudo dpkg-reconfigure dash |
后面如果需要将 /bin/sh 的默认链接换回 dash,同样执行上面的命令,并选择 < Yes >。
如果想了解更多,可以查看官方维基:https://wiki.ubuntu.com/DashAsBinSh
(END)
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.