Tra*_*les 7 unix linux bash terminal command-line
我希望在 Linux 终端中响应密码提示。我知道如何使用echo非密码提示来执行此操作。例如,假设whatsyourname.sh在运行后提示我输入带有我名字的字符串,但不允许我的名字作为初始命令中的参数传递。我会做以下事情:
echo -e "dan" | ./whatsyourname.sh
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行一个命令,在运行后要求我输入密码,则以下命令不起作用:
echo -e "supersecurepassword" | sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
我猜这与在命令行中输入密码时隐藏字符有关。我将如何响应初始命令中的密码提示?
小智 5
您正在寻找sudo -S
解释-S-man sudo
-S, --stdin 将提示写入标准错误并从标准输入读取密码,而不是使用终端设备。密码后必须跟有换行符。
简单的,
#!/bin/bash
echo "notsecure" | sudo -S apt-get update
Run Code Online (Sandbox Code Playgroud)
多变的,
#!/bin/bash
pass="notsecure"
echo $pass | sudo -S apt-get update
Run Code Online (Sandbox Code Playgroud)
我们还是打字吧
#!/bin/bash
read -s -p "[sudo] sudo password for $(whoami): " pass
echo $pass | sudo -S apt-get update
Run Code Online (Sandbox Code Playgroud)
解释 -s 和 -p -help read
-r 不允许反斜杠转义任何字符
-s 不回显来自终端的输入
route -n例如,如果您制作一个登录多个服务器进行查看的脚本,那么这会很方便。