引言:openwrt默认的shell解释权是ash,这个解释器不支持历史记录,路径补全也是只支持英文,不支持中文,语法也只支持POSIX 标准语法,像数组、正则表达式都是不支持的,修改后方便编写复杂shell脚本。
1.把bash编译进固件
- 运行make menuconfig进入图形化配置界面
- Utilities -> Shells -> bash
- 把bash打上星号后保存退出,运行make V=99编译固件
2.配置root用户默认shell为Bash
- 修改etc/shells文件,这个文件是约束合法 Shell:该文件列出的所有路径对应的 Shell 被认为是系统支持的“合法” Shell。当用户尝试通过以下方式修改登录 Shell 时,系统会检查目标 Shell 是否在 /etc/shells 中。运行
echo "/bin/bash" >> /etc/shells
把bash加入该文件。 - 修改root用户的默认shell为Bash:修改/etc/passwd文件root行的/bin/ash为/bin/bash。
- 验证root用户的默认shell是否已更改为Bash:上述修改完成后重新登录shell运行
echo $SHELL
命令查看当前窗口的shell解释权
3.脚本修改解释权为bash
- 修改有需求的脚本首行为 #!/bin/bash,#!/bin/ash和#!/bin/sh都是指向的/bin/ash。