Shell - 在按键上退出一段时间

时间:2017-09-22 11:22:54

标签: bash shell

在Raspberry上,我制作了一个带有电影和图片的自定义幻灯片。我正在扩展脚本,所以我也可以选择一个剪辑来播放。我制作了一个包含3个选项的菜单:

  1. 幻灯片
  2. 剪辑
  3. 关闭
  4. 幻灯片是一个无限循环:

    case $opt in
                "Slideshow")
                PLAY="1"
                while true; do
                        if [ "$PLAY" = "1" ];
                        then
                                PLAY=2
                                bash ./videoplayer.sh
                        else
                                PLAY=1
                                bash ./pictureplayer.sh
                        fi
                done
                ;;
    

    videoplayer.sh的例子:

    VIDEOPATH="/home/pi/ftp/video"
    
    for entry in $VIDEOPATH/*
    do
            clear
            omxplayer "$entry" > /dev/null
    done
    

    pictureplayer.sh的例子:

    PICTUREPATH="/home/pi/ftp/picture"
    
    fbi -a --noverbose -t 30 -u -1 $PICTUREPATH/*.png
    

    在任何特定时刻,我想停止while循环并再次显示菜单。即使它是在播放剪辑的中间。我只找到了可以在每次播放剪辑/图片之后或之前读取输入的选项。

1 个答案:

答案 0 :(得分:0)

您有两个问题:停止剪辑,如果您想要即时回复,请accepting keys instead of input lines。在后台运行幻灯片,然后在case $opt in "Slideshow") (set -m # set up process groups ./slideshow.sh & # the existing loop read -n1 kill -HUP %+) # subshell suppresses signal reporting ;; 返回后将其终止:

kill

一个-m会影响所有进程(demo),因为启用了作业控制(bash)的shell会将它们全部放入进程组中。 (请注意,如果您为文件指定shebang并使其可执行,则不必将(b)放在shell脚本名称前面。)