程序内的 Bash 脚本命令

程序内的 Bash 脚本命令

如果这对您来说太简单了,请原谅,但在发布此问题之前我确实进行了搜索。我正在尝试创建我的第一个 bash 脚本,用于在我的 softether vpn 上自动连接。要手动连接,请按照以下步骤操作;

sudo ./vpnclient start
sudo ./vpncmd

然后它问我从 1 到 3 的选择问题,我选了 2 并按下回车键。然后它问我其他问题,我直接按下回车键。然后;

AccountConnect ofis
exit
sudo dhclient vpn_vpn_se
sudo ip route add X.X.X.X/32 via 192.168.1.1
exit

现在这是我的业余脚本,但是我猜有些地方不对劲,因为它涉及到我应该从 1 到 3 中选择一个选项的部分,但在那部分之后它什么也不做。

#!/bin/bash
cd /home/burock/vpnclient
sleep 1
sudo ./vpnclient start
sleep 1
sudo ./vpncmd
sleep 1
printf "2\n"
sleep 1
printf "\n"
sleep 1
printf "AccountConnect ofis\n"
sleep 1
exit
sudo dhclient vpn_vpn_se
sleep 1
sudo ip route add 46.1.131.30/32 via 192.168.1.1
sleep 1
exit

你能帮我吗?我猜它不会输入“2”并按回车键,因为它在 vpncmd 命令下。或者我做错了……我还尝试在每个命令之间暂停 1 秒。顺便说一句,我正在使用 Lubuntu,如果这很重要的话。提前谢谢。

答案1

一旦运行了类似 的命令sudo ./vpncmd,控制权就不会返回到脚本,直到命令退出(或自行进入后台)。只有此时,命令才会printf执行,并像往常一样将其输出发送到终端。

您可以尝试类似

{ sleep 1
  printf "2\n"
  sleep 1
  printf "\n"
  sleep 1
  printf "AccountConnect ofis\n"
} | sudo ./vpncmd

或者(如果sleeps 不是必需的)

printf '%s\n' 2 "" "AccountConnect ofis" | sudo ./vpncmd

等等,但如果失败了,你可能需要用类似expect或的脚本来编写交互式会话autoexpect

相关内容