This is the old SliTaz forum - Please use the main forum.slitaz.org

Вопрос по скриптам
  • OnionOnion July 2010
    Вернее, не совсем по скриптам. В общем, начну по порядку.
    понадобилась прога, чтобы устанавливать pppoe-соединение не из консоли, а нажатием одной кнопки.
    Изучив примеры из /usr/share/examples приступил к кодингу. Получилось вот что:

    #!/bin/bash
    #
    # SliTaz pppoe-starter
    # ver 0.1
    # (c) Onion, 20100722

    status_check
    {
    if [ -f /var/run/pppoe.conf-pppoe.pid.pppoe ]
    then
    STATUS="ON"
    else
    STATUS="OFF"
    fi
    }

    status_check

    export MAIN_DIALOG='
    < window title="pppoe-starter" icon-name="network-transmit-receive">
    < vbox>
    < text use-markup="true" width-chars="25">
    < label>"< b>PPPoE-starter< /b>"< /label>
    < /text>
    < text wrap="true"use-markup="true">
    < label>(c) Onion, ver 0.1< /label>
    < /text>
    < text use-markup="true">
    < variable>TEXT_STATUS< /variable>
    < label>"< b>'$STATUS'< /b>"< /label>
    < action>status_check< /action>
    < action>refresh:TEXT_STATUS< /action>
    < /text>
    < button>
    < label>PPPoE start< /label>
    < input file icon="gnome-netstatus-rx">< /input>
    < action>pppoe-start< /action>
    < action>status_check< /action>
    < action>refresh:TEXT_STATUS< /action>
    < /button>
    < button>
    < label>PPPoE stop< /label>
    < input file icon="network-offline">< /input>
    < action>pppoe-stop< /action>
    < action>status_check< /action>
    < action>refresh:TEXT_STATUS< /action>
    < /button>
    < /vbox>
    < /window>
    '
    gtkdialog --center --program=MAIN_DIALOG

    exit 0
    (пробелы после < вставлены, чтобы корректно отображался код)
    Собственно, вопрос. Как сделать так, чтобы при подключении( а соответственно при создании файла /var/run/pppoe.conf-pppoe.pid.pppoe, проверка которого проводится при старте и при нажатии на кнопки ) менялся текст, обозначенный TEXT_STATUS?

    Прогу пишу для себя, и скорее, чтобы научиться писать под слитаз, но и на практике я ее уже тоже применяю.
  • OnionOnion July 2010
    В общем, как я понял, не выполняется вот это действие:
    < action>status_check< /action>

    Тут ошибка в синтаксисе?
  • LexeiiLexeii July 2010
    Сергей, если status_check — это функция, то по идее, в конце должен быть список параметров в скобках, а как минимум — пустые скобки. Вот так:
    status_check()
    Попробуй во всех местах проставить эти скобки.

    Ну, и вроде бы у элемента <text> не может быть вложенного элемента <action>.
  • OnionOnion July 2010
    Со скобками не запускается вообще, а к тексту действие добавил для проверки скорее.
  • LexeiiLexeii July 2010
    Посмотри пример, как обновляется поле даты: http://xpt.sourceforge.net/techdocs/language/gtkdialog/gtkde02-GtkdialogExamples/ar01s03.html

    Исправляюсь:

    Определение функции:
    status_check() {
    тело функции
    }
    Вызов функции
    status_check
    http://rus-linux.net/lib.php?name=MyLDP/consol/aliases.html

    Обширная информация по gtkdialog: http://www.murga-linux.com/puppy/viewtopic.php?t=38608
  • OnionOnion July 2010
    Спасибо, буду пробовать:))
  • OnionOnion August 2010
    Блин, все равно функция вызывается только при загрузке. При нажатии на кнопку, т.е. при < action>status_check< /action> ничего не происходит. Может одной кнопкой нельзя вызывать внешнюю команду - pppoe-start и внутреннюю функцию status_check? Или функцию надо по-другому в данном случае вызывать?
  • LexeiiLexeii August 2010
    Сергей, я экспериментировал с диалогом - пишу свою программу. Пробовал и твой скрипт доработать, но ничего внятного не получилось. У меня нет соединения РРРоЕ, только РРР. Расскажу, что удалось добиться, а дальше, может ты разовьешь.

    Во-первых, диалог - это отдельная программа, хоть он и находится физически в одном файле, но он ничего не знает о переменных и функциях скрипта. Может пользоваться только переменными окружения.

    Чтобы запустить функцию скрипта из диалога, делают так:
    Переменная $0 содержит полный путь к нашему скрипту. В начале скрипта мы экспортируем это в переменные окружения:
    export BIN=$0

    Далее, в диалоге, в действии (action) мы вызываем наш же скрипт с параметром:
    BIN check

    Дальше я не совсем понял - возможно, этого и достаточно, чтобы запустилась функция check, но лучше перестраховаться - анализируем параметр скрипта $1, и если он равен check, то вызываем функцию check. Эта проверка должна находиться в скрипте не ранее описания самой функции:
    check() {
    ...
    }

    case $1 in
    check) check;;
    esac

    или

    if [ "$1" = "check" ]
    then
    check
    fi

    Функция должна новое значение экспортировать в переменные окружения, доступные для диалога. Далее, следующее действие диалога должно обновить переменную в окне.

    Вот и всё. Читай побольше чужих скриптов, они - источник вдохновения.
  • OnionOnion August 2010
    Алексей, огромное спасибо! Сделал немножко по-своему, если делать так, как вы предложили - то появлялся еще один диалог. А я сделал условие: если параметр = check, то выполняется функция, если параметр пустой, то выполняется функция и создается диалог. В общем, вот полный исходник:
    #!/bin/bash
    #
    # SliTaz pppoe-starter
    # ver 0.1.2
    # (c) Onion, 20100809

    export TIME=`date`
    export FILE='/bin/pppoe-starter'
    export STATUS="ERR"

    status_check()
    {
    if [ -f /var/run/pppoe.conf-pppoe.pid.pppoe ]
    then
    export STATUS="ON"
    else
    export STATUS="OFF"
    fi
    echo $STATUS > /tmp/pppoe-starter
    }

    export CHECK=status_check

    if [ "$1" = "check" ]
    then
    $CHECK
    fi

    if [ "$1" = "" ]
    then

    $CHECK

    export STARTER_BOX='
    < window title="pppoe-starter" icon-name="network-transmit-receive">
    < vbox>
    < text use-markup="true">
    < label>"< b>PPPoE-starter< /b>"< /label>
    < /text>
    < text wrap="true"use-markup="true">
    < label>(c) Onion, ver 0.1< /label>
    < /text>
    < text>
    < variable>TEXT_STATUS< /variable>
    < label>Status< /label>
    < input>cat /tmp/pppoe-starter< /input>
    < /text>
    < button>
    < label>PPPoE start< /label>
    < input file icon="gnome-netstatus-rx">< /input>
    < action>pppoe-start< /action>
    < action>$FILE check< /action>
    < action>refresh:TEXT_STATUS< /action>
    < action>[ $LOG == true ] && echo "connected at" $TIME >> '/var/log/pppoe-starter'< /action>
    < /button>
    < button>
    < label>PPPoE stop< /label>
    < input file icon="network-offline">< /input>
    < action>pppoe-stop< /action>
    < action>$FILE check< /action>
    < action>refresh:TEXT_STATUS< /action>
    < action>[ $LOG == true ] && echo "disconnected at" $TIME >> '/var/log/pppoe-starter'< /action>
    < /button>
    < checkbox>
    < label>save log to /var/log/pppoe-starter< /label>
    < variable>LOG< /variable>
    < default>true< /default>
    < /checkbox>
    < /vbox>
    < /window>
    '
    gtkdialog --center --program=STARTER_BOX > /dev/null

    fi

    exit 0


    а чтобы быстро запускать эту вещь - создал на раб. столе файл adsl.desktop со следующим содержимым:
    [Desktop Entry]
    Name=ADSL
    Exec=subox pppoe-starter
    Icon=/usr/share/icons/SliTaz/32x32/status/network-transmit-receive.png

    буду дальше развивать - прикручивать новые функции, а заодно и учиться:))

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In Apply for Membership

SliTaz Social