dies eine sehr einfache Art und Weise funktioniert zu demonstrieren, wirdbash `las -t` nicht auf Rohr
mkfifo /tmp/a
read -t 1 a < /tmp/a
die Lese nie mehr zurück zu laufen.
Bash Handbuch sagt: Diese Option ist nur wirksam, wenn Leseeingang von einem Terminal, Rohr ist zu lesen, oder andere spezielle Datei; sie keinen Effekt hat, wenn sie von regulären Dateien
Lesen aber/tmp/a ist ein Rohr, Ausgabe von ls ist
ls -l /tmp/a
prw-r--r-- 1 root root 0 Feb 4 22:18 /tmp/a
die Bash-Version ist:
GNU bash, Version 4.3.46 (1) -release (x86_64-pc-linux-gnu) Urheberrecht (C) 2013 Free Software Foundation, Inc.
das O ist:
Ubuntu 16.04.1 LTS
wenn ich excute: strace bash -c "lesen -t 3 a tmp/a", fand ich, dass die Lese-Block an open ("/ tmp/a" , O_RDONLY, So-nur arbeiten, wenn jemand die Rohrleitung geöffnet hat? – yuanjianpeng
habe es, vielen Dank. Schließlich benutze ich: Timeout 3 bash -c "lesen Sie ein tmp/a" stattdessen. – yuanjianpeng
'lesen' ist einfach blockiert bis jemand schreibt. 'timeout' ändert sich nicht viel. Es stoppt einfach 'lesen' von weiter warten. Aber das * real * Problem ist, dass niemand in die Pipe schreibt. Vielleicht möchten Sie das Handbuch lesen, das mit verlinkt ist verstehe, wie Rohre funktionieren. – usr