Старая версия скрипта Че-то решил переделать.
1. Заводим переменную для хранения каталога с конфигами:
CONFIGDIR="~/openvpn/configs"
2. Добавляем функции create_list()
и ask_list()
по этому вот рецепту
create_list() #$1 - dir, $2 - file mask { FOUNDLST="" for FLE in $(find $1 -maxdepth 1 -iname $2|sort); do if [ -n "$FLE" ]; then FOUNDLST="$FOUNDLST"`basename $FLE`"\n" fi done } ask_list() #$1 - list #$2 - header { LIST_BUF=$1 LIST_BUF="$LIST_BUF""Exit " LIST_BUF="$LIST_BUF""Down" LIST_BUF=`echo -e "$LIST_BUF"|sed 's/\n/ /'` PS3=$2 echo select LIST_RET in $LIST_BUF; do if [ -n "$LIST_RET" ];then break fi done }
Единственное что, в create_list()
добавляем сортировку (sort
), а в ask_list()
два пункта — для выхода из скрипта и для разрыва соединения.
3. Делаем функцию для разрыва соединения:
ovpn_down() { echo -n "Down connection..." CTR=0 pkill openvpn while [ "$CTR" -ne "1" ];do echo -n "." CTR=`ps ax|grep -c "openvpn"` sleep 1 done echo }
4. Основной скрипт.
4.1. Создаем список из файлов конфигов
4.2. Выводим список на экран и ожидаем ответа пользователя.
4.3. Выводим пользователю, что он выбрал.
4.5. Проверяем, не выбран ли выход — если выбран, завершаем работу скрипта.
4.6. Если выбран пункт Down, то вызываем функцию разрыва соединения и выходим.
create_list $CONFIGDIR "*.ovpn" ask_list $FOUNDLST "Select config: " echo "Selected: $LIST_RET" if [[ "$LIST_RET" == "Exit" ]]; then echo "Exitting..." exit 0 fi if [[ "$LIST_RET" == "Down" ]]; then ovpn_down exit 0 fi
4.7. Если до этого не вышли, завершаем прошлое соединение, если оно установлено:
ovpn_down
4.8. Поднимаем новое соединение (да, тут отправляю лог Openvpn на третий терминал):
echo "Up connection..."
openvpn --config "$CONFIGDIR/$LIST_RET" >/dev/tty3 &
4.9. Запускаю скрипт waiter на 10 секунд
~/scripts/waiter 10
1. На PasteBin
2. На GitHub
Pingback: Устранение глюка с find | Персональный блог Толика Панкова