Bash 如何使用.sh脚本登录Linux中的程序?
我肯定这是在堆栈溢出的某个地方,但我已经研究了几个小时,没有一个答案有效 我需要回答.sh脚本中的提示以自动登录到不同的帐户Bash 如何使用.sh脚本登录Linux中的程序?,bash,shell,prompt,Bash,Shell,Prompt,我肯定这是在堆栈溢出的某个地方,但我已经研究了几个小时,没有一个答案有效 我需要回答.sh脚本中的提示以自动登录到不同的帐户 #!/bin/bash program9000 login 我的脚本不会自动回答提示 #!/bin/bash program9000 login 那部分很好用 然后,我得到一系列提示,无法弄清楚如何让.sh脚本自动回复。每次我都会以同样的方式回复这4个提示 是否要输入新密钥? 我想回答 y 您希望如何进行身份验证? 1。输入密码 2。做点别的事 3。做点别的事
#!/bin/bash
program9000 login
我的脚本不会自动回答提示
#!/bin/bash
program9000 login
那部分很好用
然后,我得到一系列提示,无法弄清楚如何让.sh脚本自动回复。每次我都会以同样的方式回复这4个提示
是否要输入新密钥?
我想回答
y
您希望如何进行身份验证?1。输入密码
2。做点别的事
3。做点别的事
q。退出
我想回答
1
请输入您的密码
我想回答
mypassword
请输入您的域名
我想回答
https://mydomain.mine.com
请注意,我不是在写提示,它们来自program9000。我只想每次回复相同的4个回复
以下内容在我的.sh脚本中不起作用
是
echo
send
我的脚本的以下几行应该是什么样子
这里有一些不起作用的东西
#!/bin/bash
program9000 login
send "y"
send "1"
send "fakepassword"
send "https://fakedomain.com"
program9000登录
您可以使用expect语言,该语言几乎适用于所有*nix分布式应用程序
您可以使用重定向将多行“应答文件”或字符串发送到您的程序
program9000登录正如其他人已经提到的,使用expect
见
要在Debian或其衍生产品上安装:
apt install expect
正如其他人已经提到的,使用expect
见
要在Debian或其衍生产品上安装:
apt install expect
您可以使用expect。
我的英语很糟糕,所以我写了一个例子
伪造程序9000.sh
assert_var()
{
if [ $1 != $2 ]; then
echo err; exit 1
fi
}
read -p 'Would you like to enter a new key?' var1
assert_var $var1 'y'
read -p 'How would you like to authenticate?' var1
assert_var $var1 '1'
read -p 'Enter your password, please' var1
assert_var $var1 'fakepassword'
read -p 'Enter your Domain name, please' var1
assert_var $var1 'https://fakedomain.com'
echo success
example.sh
#!/bin/bash
expect<<EOF
spawn bash ./fakeprogram9000.sh login
expect "Would you like to enter a new key?" {send "y\r"}
expect "How would you like to authenticate?" {send "1\r"}
expect "Enter your password, please" {send "fakepassword\r"}
expect "Enter your Domain name, please" {send "https://fakedomain.com\r"}
expect eof
EOF
#/bin/bash
expect您可以使用expect。
我的英语很糟糕,所以我写了一个例子
伪造程序9000.sh
assert_var()
{
if [ $1 != $2 ]; then
echo err; exit 1
fi
}
read -p 'Would you like to enter a new key?' var1
assert_var $var1 'y'
read -p 'How would you like to authenticate?' var1
assert_var $var1 '1'
read -p 'Enter your password, please' var1
assert_var $var1 'fakepassword'
read -p 'Enter your Domain name, please' var1
assert_var $var1 'https://fakedomain.com'
echo success
example.sh
#!/bin/bash
expect<<EOF
spawn bash ./fakeprogram9000.sh login
expect "Would you like to enter a new key?" {send "y\r"}
expect "How would you like to authenticate?" {send "1\r"}
expect "Enter your password, please" {send "fakepassword\r"}
expect "Enter your Domain name, please" {send "https://fakedomain.com\r"}
expect eof
EOF
#/bin/bash
expect可能尝试使用expect实用程序,您可以在此论坛中搜索。“以下内容在我的.sh脚本中不起作用yes
send
”请发布您尝试过的确切脚本,以及尝试它们的确切结果。类似于printf'1\nmypassword\nhttps://mydomain.mine.com“|./script.sh
?它不响应第一个提示。提示等待我的消息,然后脚本失败。你们会怎么做?@ErikG:你们试过我的建议吗?也许试一下expect
实用程序,你们可以在这个论坛上搜索。“以下内容在我的.sh脚本中不起作用
”请发布你们试过的确切脚本,以及尝试它们的确切结果。类似于printf'1\nmypassword\nhttps://mydomain.mine.com“|./script.sh
?它不响应第一个提示。提示等待我的消息,然后脚本失败。你们会怎么做?@ErikG:你们试过我的建议吗?这是第一个产生不同结果的解决方案。我看到了第一个提示,然后出现了一个新的bash行,这是产生不同结果的第一个解决方案。我看到了第一个提示,然后一个新的bash行出现在我的响应的地方。