Linux 在上一个命令等待输入时,将字符串发送到bash脚本中的输入

Linux 在上一个命令等待输入时,将字符串发送到bash脚本中的输入,linux,bash,shell,stdin,Linux,Bash,Shell,Stdin,是的,那是个糟糕的标题,我知道。我不知道如何用语言来表达 所以我在运行linux并建立一个openVPN;这很麻烦,所以我决定制作一个BASH脚本来帮我完成。这是我的 #!/bin/bash PROMPT_COMMAND= echo -en "\033]0;VPNBook\a" cd ~/Other/VPN\'s/VPNBook if ! pgrep openvpn > /dev/null then echo "VPN is not running" read -r

是的,那是个糟糕的标题,我知道。我不知道如何用语言来表达

所以我在运行linux并建立一个openVPN;这很麻烦,所以我决定制作一个BASH脚本来帮我完成。这是我的

#!/bin/bash
PROMPT_COMMAND=
echo -en "\033]0;VPNBook\a"
cd ~/Other/VPN\'s/VPNBook
if ! pgrep openvpn > /dev/null
    then
    echo "VPN is not running"
    read -r -p "Would you like to start the VPN? [Y/n]" response
    response=${response,,}
    if [[ $response =~ ^(no|n)$ ]]
        then
        exit
    else
        echo "Starting VPN"
        # echo "Username: vpnbook"
        # echo "Password: 2Unuhust"
        # sudo echo

        # Line in question
        sudo openvpn --config vpnbook-euro1-tcp443.ovpn
    fi
else
    echo "VPN is running"
    read -r -p "Would you like to stop the VPN? [Y/n]" response
    response=${response,,}
    if [[ $response =~ ^(no|n)$ ]]
        then
        exit
    else
        echo "Stopping VPN"
        sudo kill $(pidof openvpn)
    fi
fi
样本输出:

Wed Mar  2 23:06:52 2016 OpenVPN 2.3.2 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Dec  1 2014
Enter Auth Username:vpnbook
Enter Auth Password:
因此,我不想手动输入用户名和密码,而是希望脚本自动输入用户名和密码,并按enter键。 因此,基本上,一旦我输入了sudo的密码,脚本就应该完成其余的工作

我做了一些谷歌搜索,据我所知,大多数事情都不起作用,要么是因为命令没有接收作为参数的信息,要么是因为输入没有通过STDIN,因为它是一个密码


提前谢谢,很抱歉,我知道这不是一个好问题。

好的,所以我用expect解决了它。这是我的最终代码:

#!/bin/bash
PROMPT_COMMAND=
echo -en "\033]0;VPNBook\a"
cd ~/Other/VPN\'s/VPNBook
if ! pgrep openvpn > /dev/null
    then
    echo "VPN is not running"
    read -r -p "Would you like to start the VPN? [Y/n]" response
    response=${response,,}
     if [[ $response =~ ^(no|n)$ ]]
         then
         echo "Doing nothing"
    sleep 1
    exit
else
    echo "Starting VPN" 
    sudo ./startVPN.exp
fi
else
    echo "VPN is running"
    read -r -p "Would you like to stop the VPN? [y/N]" response
    response=${response,,}
    if [[ $response =~ ^(yes|y)$ ]]
        then
        echo "Stopping VPN"
        sudo kill $(pidof openvpn)
        echo "VPN Stopped"
            sleep 1
            exit
        else
            echo "Doing nothing"
            sleep 1
            exit
    fi
fi
和startVPN.exp:

#!/usr/bin/expect

set PASS "2Unuhust"
set USER "vpnbook"
spawn openvpn --config vpnbook-euro1-tcp443.ovpn
expect "Enter Auth Username:"
send "$USER\r"
expect "Enter Auth Password:"
send "$PASS\r"

您是否尝试过类似于
sudo echo-e“vpnbook\n2Unuhust\n”| openvpn--配置vpnbook-euro1-tcp443.ovpn的简单方法?这将通过管道将您的用户名和密码传输到openvpn,以便在stdin上阅读。@JonathanEllithorpe在那里运气不好。