Извлечение и форматирование метки времени в bash

Это, безусловно, связано с тем, как вы закрываете дескриптор файла, который вы открыли ранее для стандартного ввода. Использование ниже должно быть в порядке

exec 10<&- 

Когда вы выполняете 0<10, вы указываете оболочке искать и поглощать содержимое файла с именем 10в вашем текущем каталоге, что делает бессмысленным в данном контексте.

В bashвы также можете использовать альтернативную форму exec 10>&-, которая достигает той же цели закрытия дескриптора.

Но при этом вам не нужно использовать execдля произвольного файлового дескриптора и читать ввод, вы можете просто прочитать ввод с помощью метода подстановки процесса в bashформы < <()как

while IFS= read -r line; do
    arr["$count"]="$line"
    ((count++))
done< <(pgtoscrap)
2
24.01.2021, 20:54
2 ответа

С датой 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 
1
18.03.2021, 22:34

С помощью простого bash printfможно форматировать время эпохи:

processThatOutputsStuff | while IFS=@ read -r path date; do
    printf '%(%c)T\n' "${date%???}"
done

${date%???}— это расширение параметра , которое удаляет последние 3 символа из значения переменной.

Если вам нужен другой формат даты и времени, замените %c.

0
18.03.2021, 22:34

Теги

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