📜  在期望脚本中手动输入 sudo 密码 (1)

📅  最后修改于: 2023-12-03 15:23:34.441000             🧑  作者: Mango

在期望脚本中手动输入 sudo 密码

在编写自动化脚本时,有些情况下需要在脚本中执行 sudo 命令,而在执行 sudo 命令时需要手动输入密码。那么如何在脚本中实现手动输入 sudo 密码呢?

使用 expect

expect 是一种用于自动与交互式程序进行交互的工具。我们可以使用 expect 来实现在脚本中手动输入 sudo 密码。

下面是实现手动输入 sudo 密码的 expect 脚本示例:

#!/usr/bin/expect -f

set timeout -1

set password [lindex $argv 0]

spawn sudo <your command>

expect {
    "Password:" {
        send "$password\r"
        exp_continue
    }
    eof
}

在该脚本中,我们使用 spawn 命令启动需要执行 sudo 命令的程序,并使用 expect 命令监控程序的输出。当程序输出 "Password:" 时,我们将通过 send 命令向程序发送密码,并使用 exp_continue 命令继续等待读取程序的输出。

在执行 expect 脚本时,我们需要将 sudo 密码作为参数传递给脚本。例如:

$ expect <expect script> <password>
示例

下面是一个示例,演示如何使用 expect 脚本手动输入 sudo 密码:

#!/bin/bash

expect << EOF
spawn sudo whoami
expect "password for"
send "<your password>\r"
expect eof
EOF

在该脚本中,我们使用 expect 命令执行 sudo whoami 命令,并在命令执行时手动输入 sudo 密码。可以将该脚本保存为一个文件,例如 test.sh,并在终端中执行。

$ chmod +x test.sh
$ ./test.sh
总结

在编写自动化脚本时,有些情况下需要手动输入 sudo 密码。使用 expect 工具,我们可以很容易地实现在脚本中手动输入 sudo 密码。