Bash 如何使用.sh脚本登录Linux中的程序?

Bash 如何使用.sh脚本登录Linux中的程序?,bash,shell,prompt,Bash,Shell,Prompt,我肯定这是在堆栈溢出的某个地方,但我已经研究了几个小时,没有一个答案有效 我需要回答.sh脚本中的提示以自动登录到不同的帐户 #!/bin/bash program9000 login 我的脚本不会自动回答提示 #!/bin/bash program9000 login 那部分很好用 然后,我得到一系列提示,无法弄清楚如何让.sh脚本自动回复。每次我都会以同样的方式回复这4个提示 是否要输入新密钥? 我想回答 y 您希望如何进行身份验证? 1。输入密码 2。做点别的事 3。做点别的事

我肯定这是在堆栈溢出的某个地方,但我已经研究了几个小时,没有一个答案有效

我需要回答.sh脚本中的提示以自动登录到不同的帐户

#!/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"
  • 您可以使用expect语言,该语言几乎适用于所有*nix分布式应用程序

  • 您可以使用重定向将多行“应答文件”或字符串发送到您的程序
  • 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行出现在我的响应的地方。