Команды Bash Script внутри программы

Пожалуйста, извините меня, если это слишком просто для вас, но я действительно выполнил поиск перед тем, как опубликовать этот вопрос. Я пытаюсь создать свой первый сценарий bash для автоматического подключения к моему softtether vpn. Чтобы подключиться вручную, я выполняю следующие шаги:

sudo ./vpnclient start
sudo ./vpncmd

затем мне задают вопрос о выборе от 1 до 3, я выбираю 2 и нажимаю Enter. Затем он спрашивает меня еще о чем-то, и я просто нажимаю "Enter". Затем;

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» и нажимать Enter, потому что он находится под командой vpncmd. Или я все делаю не так ... Я также старался делать паузу в 1 секунду между каждой командой. Кстати, я использую Lubuntu, если это важно. Заранее спасибо.

1
задан 28 July 2021 в 21:29

1 ответ

После того, как вы запустите команду типа sudo ./vpncmd, управление не вернется к вашему сценарию, пока команда не завершится (или не перейдет в фоновый режим) . Только в этот момент ваши команды printf будут выполнены, отправив свой вывод на терминал, как обычно.

Вместо этого вы можете попробовать что-нибудь вроде

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

или (если sleep s не являются строго необходимыми) просто

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

и так далее, но если это не поможет, вам может потребоваться сценарий интерактивного сеанса с чем-то вроде expect или autoexpect

2
ответ дан 20 August 2021 в 10:31

Другие вопросы по тегам:

Похожие вопросы: