使用`read -s`隐藏密码输入后如何添加换行符?
解决curl输出紧跟密码输入行的问题
原执行脚本如下:
#!/bin/bash curl -I \ -u $(read -p "`echo $'\n'`User: "; echo $REPLY):$(read -s -p "`echo $'\n'`Pass: "; echo $REPLY;) \ https://example.com \ -s
执行后密码输入隐藏的表现符合预期,但curl输出会直接紧跟在Pass:文本后,呈现效果如下:
User: a Pass: HTTP/2 200 content-encoding: gzip
我们需要让curl输出从密码行的下一行开始,目标效果为:
User: a Pass: HTTP/2 200 content-encoding: gzip
解决方法
问题根源在于read -s命令:它会关闭输入回显,但用户输入完成按下回车后,不会自动输出换行符。只需在密码输入完成后手动添加换行即可。
方案1:直接修改原脚本
在密码输入的read命令末尾添加echo语句,用于输出换行:
#!/bin/bash curl -I \ -u $(read -p "`echo $'\n'`User: "; echo $REPLY):$(read -s -p "`echo $'\n'`Pass: "; echo $REPLY; echo) \ https://example.com \ -s
方案2:拆分输入逻辑(更易读)
把用户名和密码的输入步骤单独拆分,代码逻辑更清晰,维护更方便:
#!/bin/bash read -p "`echo $'\n'`User: " username read -s -p "`echo $'\n'`Pass: " password echo # 手动输出换行,分隔密码行和curl输出 curl -I -u "$username:$password" https://example.com -s
内容的提问来源于stack exchange,提问作者Jürgen Thelen
相关产品推荐
相关产品推荐

