Как уже было сказано в комментариях, вероятно, что-то не так с вашим диском. Моей первой мыслью было бы проверить дисковое пространство. Также проверьте файловую систему (например, btrfs snaps).
df -h
Затем проверьте права доступа к файлам (chmod и т.д.) и фактические сбои на диске. Попробуйте записать или потрогать файлы в других каталогах/разделах
touch ~/yayfile.txt
touch /yayfile.txt
Предполагая, что вы получаете продолжительность в простых секундах или в виде положительных целых чисел с суффиксами h
, m
и/или s
, следующее вычисляет продолжительность в секундах (, но не проверяет, что предоставленные аргументы, без суффикса, на самом деле являются положительными целыми числами, и не очень тщательно следит за тем, чтобы суффиксы были указаны правильно):
to_seconds () {
seconds=0
for ts do
case $ts in
*h) seconds=$(( seconds + 60*60*"${ts%h}" )) ;;
*m) seconds=$(( seconds + 60*"${ts%m}" )) ;;
*) seconds=$(( seconds + "${ts%s}" )) ;;
esac
done
printf '%s\n' "$seconds"
}
Цикл в функции будет перебирать заданные аргументы.
Подстановка параметра ${ts%h}
удалит замыкающий h
с конца значения $ts
, если он там есть.
Если использовать 5m 5m 5m
в качестве аргумента, будет вычислено количество секунд для 15 минут.
Вы должны иметь возможность использовать это в своем коде,возможно, не в такой точной форме (как отдельная функция ), а как часть кода, который вы сейчас пишете.
Тестирование:
$ to_seconds 5h 22m 44s
19364
$ to_seconds 5h 22m 44
19364
$ to_seconds 44
44
$ to_seconds 10
10
$ to_seconds 10m
600
$ to_seconds 10h
36000
$ to_seconds 2i
bash: seconds + 2i: value too great for base (error token is "2i")
Чтобы убедиться, что данное число является целым числом, см.