Это, безусловно, связано с тем, как вы закрываете дескриптор файла, который вы открыли ранее для стандартного ввода. Использование ниже должно быть в порядке
exec 10<&-
Когда вы выполняете 0<10
, вы указываете оболочке искать и поглощать содержимое файла с именем 10
в вашем текущем каталоге, что делает бессмысленным в данном контексте.
В bash
вы также можете использовать альтернативную форму exec 10>&-
, которая достигает той же цели закрытия дескриптора.
Но при этом вам не нужно использовать exec
для произвольного файлового дескриптора и читать ввод, вы можете просто прочитать ввод с помощью метода подстановки процесса в bash
формы < <()
как
while IFS= read -r line; do
arr["$count"]="$line"
((count++))
done< <(pgtoscrap)
С датой GNU:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs -I '{}' date --date=@{}
Wed Jan 13 20:22:43 CET 2021
Во FreeBSD:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs date -r
Wed Jan 13 20:22:43 CET 2021
С помощью простого bash printf
можно форматировать время эпохи:
processThatOutputsStuff | while IFS=@ read -r path date; do
printf '%(%c)T\n' "${date%???}"
done
${date%???}
— это расширение параметра , которое удаляет последние 3 символа из значения переменной.
Если вам нужен другой формат даты и времени, замените %c
.