Я хотел, чтобы сценарий визуально предупредил пользователей о моей системе, что их пароль собирается истечь. Я нашел этого здесь.
Вещь, автор того сценария получает количество дней к истечению пароля путем преобразования дат в секунды, вычитания и затем передающие секунды ко дням.
Проблема состоит в том, что моя система производит те даты как "назад 08, 2018" (на сегодняшний день). Если я придерживаюсь использования команды даты для преобразования даты в секунды, как автор сделал, то я получаю ошибку: недопустимая дата 'назад 08, 2018'.
Какая-либо справка?
Вот полный сценарий:
#! /bin/bash
# Issue a desktop notification if the user password is about to expire
# Uses the "chage" command frome the "passwd" package (likely installed)
# Best added to the session startup scripts
# get password data in array
saveIFS=$IFS
IFS=$'\n'
chagedata=( $(chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )
IFS=$saveIFS
# obtain times in seconds
now=$(date +%s)
expires=$(date +%s -d "${chagedata[1]}")
# compute days left (roughly...)
daysleft=$(( ($expires-$now)/(3600*24) ))
echo "Days left: $daysleft"
# leave some evidence that the script really ran at startup
echo "Days left: $daysleft" > /var/tmp/$(basename $0).out
# determine and send the notification (stays mute if outside the warning period)
if [[ $daysleft -le 0 ]]
then
notify-send -i face-worried.png -t 0 "Password expiration" "Your password expires within a day"'!'
elif [[ $daysleft -le ${chagedata[6]} ]]
then
notify-send -i face-smirk.png -t 0 "Password expiration" "Your password expires in $daysleft days."
fi
Согласно date
документация , вход в настоящее время должен быть в локали независимым форматом . Они предлагают использовать LC_TIME=C
для создания локали независимый вывод даты. В Вашем случае необходимо будет предварительно ожидать эти chage
команда, чтобы заставить его произвести строку даты, которая date
сможет проанализировать:
chagedata=( $(LC_TIME=C chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )