在bash中回答提示

时间:2018-06-20 21:17:05

标签: bash terminal

我经常需要运行一个bash脚本,该脚本需要我提供输入,并且我想通过自动化来改进我的工作流程。

就我而言,我的bash脚本需要我提供3个输入:

What interface should i use?
1

Enter the password:
mypass

Please restart the program:
sudo bash restart

如何使bash脚本文件自动输入这些值?我试图弄清楚这一点,但所有答案都与输入是或否有关。

3 个答案:

答案 0 :(得分:1)

如果这是程序所需的全部输入,则只需将输入(每行一个)放入文本文件中,然后像这样运行它:

$> ./yourscript.sh < yourtextfile.txt

在您的示例中,文本文件将包含

1
mypass
sudo bash restart

答案 1 :(得分:1)

如果您有这样的脚本。sh:

#!/bin/bash
read -p "What intergace should i use?"$'\n' interfacenum
echo 
read -p "Enter the password:"$'\n' pass
echo 
read -p "Please restaart the program:"$'\n' prog
echo

echo "Values:"
for i in interfacenum pass prog; do
        echo $'\t'"$i=\"${!i}\""
done

您可以使用echo或printf将值“输入”到脚本中:

 echo -ne "1\nmypass\nsudo bash restart\n" | ./script.sh

答案 2 :(得分:0)

您可以使用expectautoexpect来完成任务。

假设这是您的文件:

cat hello.sh 
#!/usr/local/bin/bash

read -p "Select the interface: " interface
echo "interface selected: $interface"

read -p "Enter the username: " username
echo "username: $username"

您甚至不必编写脚本。您可以autoexpect为您生成脚本。

autoexpect ./hello.sh 
autoexpect started, file is script.exp
Select the interface: 1
interface selected: 1
...(more input and output to generate the script)

检查生成的脚本。

tail -n7 script.exp 
expect -exact "Select the interface: "
send -- "1\r"
expect -exact "1\r
interface selected: 1\r
Enter the username: "
send -- "vivek\r"
expect eof

现在请坐下来并运行生成的脚本

./script.exp 
spawn ./hello.sh
Select the interface: 1
interface selected: 1
Enter the username: vivek
username: vivek