Скрипт Bash запускается при отладке (-x), но не работает при нормальном запуске - PullRequest
1 голос
/ 25 января 2012

У меня есть bash-скрипт, который я запускаю через cron для перезапуска vlc (я использую vlc для показа потока с IP-камеры, которую я использую в качестве радионяни - поток постепенно задерживается, поэтому я запускаю этот скрипт, чтобы убить все экземплярыVLC и перезапустите его).Этот скрипт прекрасно работал в Ubuntu 11.04 в течение года.Я обновился до Ubuntu 11.10 (о, глупый я), и теперь он работает правильно, только если я запускаю его с включенной опцией отладки bash (bash -x script.sh).Если я запускаю его без опции -x, сценарий успешно убивает все экземпляры vlc, но затем завершает работу и не может перезапустить vlc.Я понятия не имею, почему.Обратите внимание, что не имеет значения, если я запускаю его с помощью или cron или direct в командной строке, без опции -x он убивает vlc, но никогда не запускает vlc.

Вот оно:

#!/bin/bash
DISPLAY=:0
export DISPLAY

VPID=( $(ps -e | grep vlc | awk '{print $1;}'))
if [ -n "$VPID" ];then
        while [ -n "$VPID" ];do
            kill $VPID
            VPID=( $(ps -e | grep vlc | awk '{print $1;}'))

        done
        vlc --volume=900 http://lily:@192.168.1.43/videostream.asf &
        sleep 10
        WID=( $(xwininfo -display :0 -name "http://192.168.1.43/videostream.asf - VLC media player" -int | awk '/Window id:/ {print $4}'))
        sleep 10
        xdotool windowmove --sync $WID 0 0
        xdotool windowsize --sync $WID 1600 1000
        exit
fi
exit

1 Ответ

1 голос
/ 25 января 2012
  1. Почему вы делаете массивы VPID и WID?
  2. Вы пытались поместить echo "after while loop" непосредственно после done в цикле while, чтобы увидеть, выпадает ли ваш скрипт из цикла, когда не в режиме отладки?
  3. Нет необходимости в явном exit способе написания вашего скрипта

Попробуйте следующее:

#!/bin/bash
export DISPLAY=":0"

VPID=$(pgrep vlc)
if [[ -n "$VPID" ]]; then
  while [[ -n "$VPID" ]]; do
    kill $VPID
    VPID=$(pgrep vlc)
  done

  vlc --volume=900 http://lily:@192.168.1.43/videostream.asf &
  sleep 10
  WID=$(xwininfo -display :0 -name "http://192.168.1.43/videostream.asf - VLC media player" -int | awk '/Window id:/ {print $4}')
  sleep 10
  xdotool windowmove --sync "$WID" 0 0
  xdotool windowsize --sync "$WID" 1600 1000
fi
...