Форматирование chage управляет произведенной датой

Я хотел, чтобы сценарий визуально предупредил пользователей о моей системе, что их пароль собирается истечь. Я нашел этого здесь.

Вещь, автор того сценария получает количество дней к истечению пароля путем преобразования дат в секунды, вычитания и затем передающие секунды ко дням.

Проблема состоит в том, что моя система производит те даты как "назад 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
2
задан 8 August 2018 в 17:09

1 ответ

Согласно date документация , вход в настоящее время должен быть в локали независимым форматом . Они предлагают использовать LC_TIME=C для создания локали независимый вывод даты. В Вашем случае необходимо будет предварительно ожидать эти chage команда, чтобы заставить его произвести строку даты, которая date сможет проанализировать:

chagedata=( $(LC_TIME=C chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )
4
ответ дан 2 December 2019 в 02:12

Другие вопросы по тегам:

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