очень простой способ продемонстрировать это запуститьБаш `чтения -t` не работает на трубе
mkfifo /tmp/a
read -t 1 a < /tmp/a
чтения никогда не вернется.
Руководство Bash говорит: Этот параметр эффективен только если чтение является чтение входных данных из терминала, труб, или другого специального файла; это не имеет никакого эффекта при чтении из обычных файлов
но/TMP/а труба, выход Ls является
ls -l /tmp/a
prw-r--r-- 1 root root 0 Feb 4 22:18 /tmp/a
версия Баш:
GNU Баш, версия 4.3.46 (1) -release (x86_64-pc-linux-gnu) Copyright (C) 2013 Free Software Foundation, Inc.
ОС является:
Ubuntu 16.04.1 LTS
когда преобразование приложений: Трассирование Баша -c «чтения -t 3 а TMP/с», я обнаружил, что блок чтения на открытом («/ TMP/а» , O_RDONLY, So -t работает только тогда, когда кто-то открыл трубку? – yuanjianpeng
получил это, спасибо большое. Наконец, я использую: timeout 3 bash -c «читать a tmp/a». – yuanjianpeng
'read' просто заблокирован до тех пор, пока кто-то не напишет об этом. 'timeout' не сильно меняется. Он просто прекращает« читать »от дальнейшего ожидания. Но проблема * real * заключается в том, что никто не пишет в трубу. Возможно, вы захотите прочитать руководство, связанное с понять, как работают трубы. – usr