我希望在linux终端中回复密码提示。我知道如何使用echo
和非密码提示执行此操作。例如,假设whatsyourname.sh
在运行后提示我输入一个带有我名字的字符串,但是不允许我的名字在inital命令中作为参数传递。我会做以下事情:
echo -e "dan" | ./whatsyourname.sh
但是,如果我在运行后运行了一个要求我输入密码的命令,则以下内容不起作用:
echo -e "supersecurepassword" | sudo apt-get update
我猜这与在命令行输入密码时隐藏字符这一事实有关。我如何在初始命令中回复密码提示?
答案 0 :(得分:4)
您正在寻找sudo -S
解释-S - man sudo
-S, - stdin 将提示写入标准错误并从标准输入中读取密码而不是 使用终端设备。密码必须后跟换行符。
简单,
#!/bin/bash
echo "notsecure" | sudo -S apt-get update
变量,
#!/bin/bash
pass="notsecure"
echo $pass | sudo -S apt-get update
让我们输入它,
#!/bin/bash
read -s -p "[sudo] sudo password for $(whoami): " pass
echo $pass | sudo -S apt-get update
解释-s和-p - help read
-r不允许反斜杠转义任何字符
-s不回显来自终端的输入
如果您创建一个记录到多个服务器的脚本以便查看route -n
,那么很方便。