考慮下面的例子中,模仿其10秒後給出的輸出命令:exec 5< <(sleep 10; pwd)
Linux系統:檢查是否文件描述符可以讀取
在Solaris中,如果我檢查文件描述符早於10秒,我可以看到它的大小爲0,這告訴我它還沒有填充數據。我可以簡單地檢查每一秒,直到該文件的測試條件滿足(不同於0),然後摳數據:
while true; do
if [[ -s /proc/$$/fd/5 ]]; then
variable=$(cat <&5)
break
fi
sleep 1
done
但對於Linux來說,我不能這樣做(紅帽,Debian的等)。無論數據是否保存,所有文件描述符的大小均爲64字節。對於需要花費大量時間來轉儲它們的輸出的各種命令,我不知道我應該何時讀取文件描述符。不,我不想等到cat <&5
完成,我需要知道什麼時候我應該首先執行cat
。因爲我正在使用此機制來發出同時發出的命令並將其輸出分配給相應的文件描述符。如前所述,這在Solaris中非常適用。
完美地工作,謝謝。我知道'read'能夠......從文件描述符中讀取,但從來沒有想過使用'-t'會做什麼。我刪除了'dummy'變量,因爲即使數據可用,語法也沒有它,它將不會被填充。 –