Bash脚本在调试时运行(-x)但在正常运行时失败

时间:2012-01-24 23:34:06

标签: bash vlc

我有一个bash脚本,我通过cron运行重启vlc(我使用vlc显示来自我用作婴儿监视器的IP网络摄像头的流 - 流逐渐延迟,所以我运行此脚本来杀死所有实例vlc并重新启动它)。这个脚本在Ubuntu 11.04中运行了一年。我升级到Ubuntu 11.10(哦,傻我),现在只有在打开bash调试选项(bash -x script.sh)的情况下运行它才能正常工作。如果我在没有-x选项的情况下运行它,脚本会成功杀死所有vlc实例,但随后退出并无法重启vlc。我不知道为什么。请注意,如果我通过或cron或直接在命令行上运行它没关系,没有-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 个答案:

答案 0 :(得分:1)

  1. 为什么要制作VPIDWID数组?
  2. 您是否尝试将echo "after while loop"直接放在while循环中的done之后,看看在调试模式下时您的脚本是否会脱离循环?
  3. 您的脚本编写方式不需要明确exit
  4. 尝试以下方法:

    #!/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