我经常需要运行一个bash脚本,该脚本需要我提供输入,并且我想通过自动化来改进我的工作流程。
就我而言,我的bash脚本需要我提供3个输入:
What interface should i use?
1
Enter the password:
mypass
Please restart the program:
sudo bash restart
如何使bash脚本文件自动输入这些值?我试图弄清楚这一点,但所有答案都与输入是或否有关。
答案 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)
您可以使用expect
和autoexpect
来完成任务。
假设这是您的文件:
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