удар: не блокирование чтения в цикле

Необходимо использовать --delete.

Не знайте, существует ли, другой путь, но музыкальные файлы составляет 10 МБ макс., таким образом, нет никакой проблемы в копии его снова.

править: как scai сказал, можно использовать --fuzzy, но я действительно не был бы. Это не гарантирует задачи, зависит от многих переменных, которые могут закончиться в ложных положительных сторонах.

7
11.12.2014, 17:05
2 ответа

Из справки читайте :

  -t timeout    time out and return failure if a complete line of input is
        not read within TIMEOUT seconds.  The value of the TMOUT
        variable is the default timeout.  TIMEOUT may be a
        fractional number.  If TIMEOUT is 0, read returns immediately,
        without trying to read any data, returning success only if
        input is available on the specified file descriptor.  The
        exit status is greater than 128 if the timeout is exceeded

Так что попробуйте:

while true
do
    echo "$var"
    IFS= read -r -t 0.5 -n 1 -s holder && var="$holder"
done

Переменная владельца используется, так как при использовании с read переменная теряет свое содержимое, если только она не используется только для чтения (в этом случае она все равно не полезна), даже если read timed out:

$ declare -r a    
$ read -t 0.5 a
bash: a: readonly variable
code 1

я не смог найти способа предотвратить это.

14
27.01.2020, 20:15

Немного поздно, но может быть (лучшее) решение:

while true ; do
    read -r -s -t 0.5; RETVAL=$?
    # ok? echo && continue
    [ $RETVAL -eq 0 ] && echo -E "$REPLY" && continue
    # no timeout ? (EOF or error) break
    [ $RETVAL -gt 128 ] || break
done

ИМХО, больший тайм-аут никому не повредит, так как "чтение" возвращается, как только становится доступной новая строка ...

{{1 }}
1
27.01.2020, 20:15

Теги

Похожие вопросы