LINUX.ORG.RU

bash скрипт


0

0

Решил написать себе скрипт чтобы при подключении моего pda автоматом настраивалось соединение, но он не работает, помогите найти ошибку

#!/bin/bash

stop=/usr/bin/synce-serial-abort
start=/usr/bin/synce-serial-start
PID=`ps aux|grep "/usr/sbin/pppd call synce-device"|grep -v "grep"|awk '{print $2}'`

if [[ `ps aux|grep dccm|grep -v "grep"|awk '{print $2}'` ]]
then su - unit -c "/usr/bin/dccm"
fi

if [[ $PID ]]
then
$stop && wait 6 && \
$start
else
$start
fi


смысл в том что кпк якобы соединяется, но потом соединение виснет
при коментировании всего кроме start='xxx' и $start все работает

PS Скрипт запускается udev при подключении моего кпк

> $stop && wait 6 && \
Что за `wait 6'? Здесь скрипт пытается дождаться окончания работы 6го дочернего
процесса, но поскольку такой процесс отсутствует, то он должен аварийно выйти с
ошибкой:
bash: wait: pid 6 is not a child of this shell
Наверное, имелось в виду `sleep 6'

> PID=`ps aux|grep "/usr/sbin/pppd call synce-device"|grep -v "grep"|awk '{print $2}'` 
проще:
PID=`pgrep -f '/usr/sbin/pppd call synce-device'`

> if [[ `ps aux|grep dccm|grep -v "grep"|awk '{print $2}'` ]] 
проще:
if pgrep dccm

> проблема в цикле, а вот почему не пойму
Не вижу цикла.

> if [[ `ps aux|grep dccm|grep -v "grep"|awk '{print $2}'` ]]
> then su - unit -c "/usr/bin/dccm"
> fi 
Я правильно понимаю, что здесь требуется запустить второй dccm, если один
dccm уже запущен?

Jini ★★
()
Ответ на: комментарий от unit_1985

как то вы странно пишете, не стал ковырятся 
что где не так советую попробовать например следующий вариант

#!/bin/bash 

stop=/usr/bin/synce-serial-abort 
start=/usr/bin/synce-serial-start 
PID=`` 

ps aux|grep dccm|grep -v "grep"|awk '{print $2}' > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then 
     su - unit -c "/usr/bin/dccm" 
fi 

ps aux|grep "/usr/sbin/pppd call synce-device"|grep -v "grep"|awk '{print $2}' > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
   $stop
   sleep 6
   $start 
else 
   $start 
fi

fura13 ★★★
()
Ответ на: комментарий от fura13

ну и если sys-process/procps стоит то ессно удобнее юзать pgrep

fura13 ★★★
()
Ответ на: комментарий от fura13

тьфу ... еще строчку : PID=`` : убрать ... забыл удалить

fura13 ★★★
()
Ответ на: комментарий от fura13

да стормозил, причем сразу в 3х местах

1. вместо цикла хотел сказать при проверке условия
2. Перепутал wait и sleep
3. надо было

if [[ `ps aux|grep dccm|grep -v "grep"|awk '{print $2}'` ]]
then
else su - unit -c "/usr/bin/dccm"
fi

PS Спасибо всем кто ответил

unit_1985
() автор топика
Ответ на: комментарий от unit_1985

Немного поспешил со спасибками вот исправленный скрипт

#!/bin/bash

#PID=`ps aux|grep "/usr/sbin/pppd call synce-device"|grep -v "grep"|awk '{print $2}'`

#ЕСЛИ РАССКОМЕНТИРОВАТЬ СТРОКУ ВЫШЕ НИЧЕГО РАБОТАТЬ НЕ БУДЕТ

if [[ `ps aux|grep dccm|grep -v "grep"|awk '{print $2}'` ]]
then
echo
else su - unit -c "/usr/bin/vdccm" fi

if [[ $PID ]]
then
/usr/bin/synce-serial-abort
/usr/bin/synce-serial-start
else
/usr/bin/synce-serial-start fi

Вопрос почему при раскоментировании сторки скрипт не работает

unit_1985
() автор топика
Ответ на: комментарий от unit_1985

#!/bin/sh

ps aux|grep -q '[d]ccm' || su - unit -c "/usr/bin/vdccm" 

if ps aux | grep -q '[/]usr/sbin/pppd call synce-device'; then
   /usr/bin/synce-serial-abort
   /usr/bin/synce-serial-start
else
    /usr/bin/synce-serial-start
fi 

sdio ★★★★★
()
Ответ на: комментарий от unit_1985

Значит проблемы не в скрипте, а в логике.
напиши список действий выполняемых вручную.

>Скрипт запускается udev при подключении моего кпк

хотя ..., пропиши-ка первой строкой скрипта (после #!/bin/sh)
PATH=/bin:/usr/bin:/sbin:/usr/sbin

sdio ★★★★★
()
Ответ на: комментарий от sdio

проблема оказалась в том что две команды вместе не воспринимаются (&& не помогает)

/usr/bin/synce-serial-abort
/usr/bin/synce-serial-start

unit_1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.