shell脚本运行报错read: Illegal option -s该如何解决?
错误根因
read -s是Bash对read命令的扩展参数,作用是关闭输入回显,适配密码输入的场景。但你脚本的首行是#!/bin/sh,绝大多数Linux发行版中/bin/sh默认指向符合POSIX标准的轻量Shell(比如Debian/Ubuntu系默认是dash),这类Shell的read命令没有实现-s参数,运行时就会报非法选项错误。
解决方案
方案1:切换脚本解释器为Bash(最简单)
直接把脚本第一行的#!/bin/sh改成#!/bin/bash即可,修改后的完整脚本如下:
#!/bin/bash echo "enter ur password" read -s PASS echo -e "\nur password is $PASS"
补充:加-e "\n"是为了输完密码后自动换行,避免后续输出和密码提示行挤在一起,优化使用体验
方案2:兼容POSIX标准Shell(无需依赖Bash)
如果你的脚本需要在没有Bash的环境运行,可以用stty命令手动控制回显开关,实现和-s完全一致的效果,脚本如下:
#!/bin/sh echo "enter ur password" stty -echo # 关闭终端回显 read PASS stty echo # 重新开启终端回显 echo "\nur password is $PASS"
注意:一定要保证stty echo被执行,哪怕脚本中途异常退出也建议补充陷阱处理逻辑,避免终端后续输入一直不回显
内容的提问来源于stack exchange,提问作者CrazyJhq
相关产品推荐
相关产品推荐

