【发布时间】:2013-01-18 04:57:39
【问题描述】:
我正在创建自己的 bash 脚本,但我现在卡住了。基本上,该脚本将用于在 CentOS 中自动设置服务器。一些软件通常要求用户输入密码。我希望脚本将我生成并存储为变量的密码而不是询问用户。
当安装过程中出现“新密码:”消息时,如何让脚本将存储在变量 $key 中的值,就像用户使用 bash 脚本键入一样?
【问题讨论】:
标签: bash input emulation user-input
我正在创建自己的 bash 脚本,但我现在卡住了。基本上,该脚本将用于在 CentOS 中自动设置服务器。一些软件通常要求用户输入密码。我希望脚本将我生成并存储为变量的密码而不是询问用户。
当安装过程中出现“新密码:”消息时,如何让脚本将存储在变量 $key 中的值,就像用户使用 bash 脚本键入一样?
【问题讨论】:
标签: bash input emulation user-input
您应该会发现“expect”命令会执行您需要它执行的操作。它广泛可用。
一个非常粗略的例子:
#!/usr/bin/expect
set pass "mysecret"
spawn /usr/bin/passwd
expect "password: "
send "$pass"
expect "password: "
send "$pass"
【讨论】:
#! 行——这是一个Expect 脚本。整个事情由expect 运行,而不是bash,所以它是用Expect 语言(基本上是Tcl)编写的。重要的命令在那里 - spawn 启动您正在与之交互的命令,expect 等待它发送特定字符串,send 发送回复。如果您想将控制权交还给用户,可以使用interact。
expect 命令,那么你有你需要的一切。注意 hashbang #!/usr/bin/expect - 你不应该从 bash shell 运行这个脚本。
这是我写的一个sn-p;询问用户密码并将其设置在 /etc/passwd 中。你可以稍微操纵一下它以获得你需要的东西:
echo -n " Please enter the password for the given user: "
read userPass
useradd $userAcct && echo -e "$userPass\n$userPass\n" | passwd $userAcct > /dev/null 2>&1 && echo " User account has been created." || echo " ERR -- User account creation failed!"
【讨论】: