【问题标题】:Shell - Exit a while on keypressShell - 按键退出一段时间
【发布时间】:2018-03-03 23:11:52
【问题描述】:

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

  1. 幻灯片放映
  2. 剪辑
  3. 关机

幻灯片是一个无限循环:

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 循环并再次显示菜单。即使它在播放剪辑的中间。我只找到了可以在每次播放剪辑/图片之后或之前读取输入的选项。

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    您有两个问题:停止剪辑,如果您想要即时响应,accepting keys instead of input lines。在后台运行幻灯片,然后在read 返回后将其终止:

    case $opt in
                "Slideshow")
                (set -m             # set up process groups
                 ./slideshow.sh &   # the existing loop
                 read -n1
                 kill -HUP %+)      # subshell suppresses signal reporting
                ;;
    

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

    【讨论】:

    • 感谢您的回答。我不得不搜索一下。到目前为止,我发现并尝试了这个选项:我添加了一个新选项 3) 退出当前播放并执行了 pkill -f slideshow.sh、pkill -f videoplayer.sh 和 pkill -f omxplayer。我在第一个选项中在 bash ./slideshow.sh 之后添加了一个“&”。
    • 我添加了更多文本作为上述文本的替代(这可能非常有效)。
    • 我在原帖中添加了新代码。你给我的最后一个代码没有按预期工作。它没有停止脚本。我现在遇到了一个新的小问题,在原帖中有说明。
    • @ErXoR:你应该问一个新问题,而不是把这个问题编辑成完全不同的问题。但是,通用的“不起作用”是什么意思?
    • 会这样做,我将删除第一篇文章中的编辑。您提供的代码(读取 -n1 并杀死 -HUP $!)不会停止幻灯片放映。它只是继续前进。 pkill -f 命令在这种情况下有效。会不会是因为我不是直接将命令放入终端,而是通过 ssh,所以它一直在运行?
    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2015-12-06
    • 2013-11-12
    • 2015-09-25
    相关资源
    最近更新 更多