Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(Bash) Можно ли работать с не завершающимися программами из под Bash

35K
15 апреля 2008 года
Jacob_Solodovich
5 / / 13.03.2008
Начитался HOWTO "Как задавать вопросы" и поэтому...
Здравствуйте Хакеры! Заранее благодарен за внимание к этой теме!
(Если не забуду, то потом то же ещё буду рассыпаться в благодарностях...)

Ну в теме уже сказано какой вопрос. Поэтому: попытался я написать скрипт для реагирования на событие скринсайвера и использовал для этого xscreensaver-command -watch. Эта прога не возвращается те. не завершается (и при наступлении события хранителя экрана она печатает строку текста) и вроде бы поэтому мне никак не удаётся её использовать в скрипте, хотя ошибок оболочка не выдаёт. Может есть всё таки способ взаимодействия с такими не возвращающимися утилитками из скрипта оболочки? Я пробовал вот так:
 
Код:
while [ STAT=`xscreensaver-command -watch` ]; do

echo "TEST"

done

и так
 
Код:
while [ 0 ]; do
 if [ "BLANK" == `xscreensaver-command -watch|cut -d" " -f1` ]; then

echo "TEST"

 fi
done


Но строка TEST так и не выводиться никогда.
361
15 апреля 2008 года
Odissey_
661 / / 19.09.2006
Ну например так
[highlight=bash]#!/bin/sh
xscreensaver-command -watch | while read line; do
case "$line" in
BLANK*) echo "BLANK";;
UNBLANK*) echo "UNBLANK";;
*) echo "OTHER";;
esac
done[/highlight]
посмотрите еще как фоном запускать процесс =), да и там у нас в прикрепленном топике вроде была литература по скриптингу.

Прежде чем тестить на xscreensaver, надо бы проверить запущен ли он, а то я вот минут 5 убил на этот пример, пока не понял, что он просто не запущен :D
35K
16 апреля 2008 года
Jacob_Solodovich
5 / / 13.03.2008
Ну я обещался в случае если мне окажут содействие на этом форуме рассыпатся в благодарностях, так что придётся теперь исполнить обещаное:)

Я очень благодарен этому Форуму за оказаную мне возможность получить необходимую мне помощь и содействие в разрешении возникших технических вопросов. Благодарности так же отправляются всем кто проявил интерес к теме а в особенности благодарности направляются пользователю с ником Odissey! Odissey и сказал ответ на вопрос который я задал и который работает в том виде в котором я его получил на этом форуме. Спасибо Odissey!


Вот ещё скрипт который получился в результате на данный момент. Возможно идеи которые в нём используются окажутся кому то полезными. Скрипт реагирует на событие xscreensaver и заглушив звук вызывает системный скрипт для помещения машины в режим Standby или Suspend-to-RAM:

Код:
#!/bin/bash
#bash 3.1
#xss-standby.sh

#We need super-user privileges for running
    if [ `id -u` -ne 0 ]; then
        echo "Run this script as super-user!"
        exit -1
    fi
#Try to find runnig XSS... for future using.
    ps ax|grep xscreensaver 1> /dev/null 2> /dev/null
    if [ "$?" -eq 0 ]; then
    XSS="yes"
    fi

#initial variables 
typeset -i VOL=0
typeset -i PERC=0

#function to move volume down
voldownf () {
BUFF=`amixer scontents|awk 'FNR == 7 {print $5}' 2> /dev/null `
VOL=${BUFF:1:3}
    unset BUFF
VOLDOWN="$VOL"
 for i in {1..11}; do
    if [ "$VOLDOWN" -gt 10 ]; then
        let "VOLDOWN =  VOLDOWN - 10"
    else
        VOLDOWN=0
    fi
    amixer -q -c 0 sset Master "$VOLDOWN""%" 2> /dev/null
    sleep 0.20
 done
 unset VOLDOWN
}
#function to restore volume. Prev. it needed function voldownf call!
volupf () {
 if [ "$VOL" -ne 0 ]; then
    while [ "$PERC" -ne "$VOL" ]; do
        let "PERC = PERC + 10"
        amixer -q -c 0 sset Master "$PERC""%"  2> /dev/null
        sleep 0.4
    done
 fi
}

#function for suspending. Distro depended.
standbyf () {
        voldownf
        /usr/sbin/standby -n #Local suspend script
        volupf
        }
       
#function that use xscreensaver-command -watch for reacting on an XSS
#event (LOCK), and then mute volume and call system's suspend script
watchf () {
xscreensaver-command -watch 2> /dev/null |while read STAT; do
        case "$STAT" in
        BLANK*) :  ;;
        UNBLANK*) : ;;
        LOCK*) standbyf ;;
        esac     
  done
}

#Script entry point
watchf
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог