我有一个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
答案 0 :(得分:1)
VPID
和WID
数组? echo "after while loop"
直接放在while循环中的done
之后,看看在调试模式下不时您的脚本是否会脱离循环?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