首页 > 解决方案 > Bash 读取时间比指定的快

问题描述

这是 bash 代码

read -t 10 -p "Video path ==>" VIDEO_SOURCE
    [ "$VIDEO_SOURCE" = q ]
if [ "$VIDEO_SOURCE" = "$NONE" ]; then
 ./run.sh

基本上我想要它做的是在 10 秒后运行 ./run.sh 如果我没有给它任何输入,问题是在不到 10 秒的时间内运行 ./run.sh。

编辑:

这是完整的脚本

#! /bin/bash

VBR="1500k"
FPS="24"
QUAL="superfast"

RTMP_URL="rtmp://live.live"
KEY="xxx-xxx-xxx-xxx"
VIDEO_SOURCE="video.mp4"

while :; do

 ffmpeg \
        -re -f lavfi -i "movie=filename=$VIDEO_SOURCE:loop=0, setpts=N/(FRAME_RATE*TB)" \
        -vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR \
        -f flv "$RTMP_URL/$KEY"

    read -t 10 -p "Video path ==>" VIDEO_SOURCE
    [ "$VIDEO_SOURCE" = q ]
if [ -z "$VIDEO_SOURCE"]; then
 ./run.sh
 fi
done

我想要它做的是在崩溃后或按下 10 秒后等待 10 秒后q,如果指定了新输入,如果输入无效或为空(以防我输入速度太慢)输入或在崩溃的情况下)我希望它运行./run.sh,我运行这个脚本tmux只是为了让它保持运行,如果我想更新输入,我只需返回tmux会话并按下q并给它新的输入。

标签: bash

解决方案


我无法重现您的问题。不过,如果真的有这样一个奇怪的问题,你可以尝试使用以下 hack 来解决它:

read var < <(timeout --foreground 10 head -n1)

这应该有点像read -t 10但依赖于外部程序timeout而不是read内置的超时功能。


推荐阅读