Это - продолжение моего сообщения здесь
Хотя A.B. предоставил мне корректный ответ, который является путем использования вывода last
и проверка, если это - текущий журнал в, это не решило мою проблему. Я проверил после входа в систему вывод last
и это не имело нижней строки, чтобы быть первым входом в систему в течение месяца. Вместо этого первый вход в систему находится на вершине (выше логинов на июль).
Мне не удалось сохранить снимок экрана, с тех пор на данный момент last
вывод стер весь июль. Это похоже /var/log/wtmp
не обновлялся немедленно при входе в систему, которым я ожидал, что это будет. В некоторых комментариях, предложенных в части 1 моего сообщения, говорится, что это обновляет каждый первый день месяца. Так или иначе я просто хочу запустить некоторый скрипт при запуске, который говорит мне, если мой текущий вход в систему является первым входом в систему в течение месяца.
Вот простой сценарий, который я записал:
firstLogin=$(last | tail -3 | head -1)
# check if "still logged in" (this is current log in)
if [[ $(grep "still" <<< $firstLogin) ]]; then
notify-send "first login!!!!"
fi
Кто-либо может предложить путь к этому? Я ценил бы любую справку.
Править: Как Вы, возможно, видели в сценарии в качестве примера, я пытаюсь сделать это без справки любых временных файлов. Однако, если бы нет никакого другого способа сделать это без временных файлов, я, вероятно, просто пошел бы с ним.
Почему бы не упростить жизнь для себя и примечания в файле при каждом входе в систему текущий месяц и тест его предыдущее значение?
, Когда Вы входите в систему и Ваша оболочка является ударом, это считает файлы ~/.bash_profile
, ~/.bash_login
, и ~/.profile
.
Так, например, добавляют к любому из них строки:
now=$(date +%m)
last=$(<~/.mylastlogin)
if [ $now != "$last" ]
then notify-send "first login!!!!"
echo $now >~/.mylastlogin
fi
unset now last
<час> Для предотвращения использования временного файла можно использовать любой существующий файл, например, ~/.profile сам файл. Всего touch
это при каждом входе в систему после сравнения ls -l
время производится. Например:
now=$(date +%m)
last=$(ls -ld --time-style=+%m ~/.profile | awk '{print $6}')
if [ $now != "$last" ]
then notify-send "first login!!!!"
touch ~/.profile
fi
unset now last
запрашивают логины для вашего пользователя только за текущий месяц и подсчитывают их.
если более одного, вы уже входили в систему в этом месяце.
единственная строка для копирования / вставки в ваш терминал:
[ $(last -R "$USER" | grep -c $(LC_ALL=en_US.utf8 date +%b)) -gt 1 ] && echo 'nope' || echo 'first login'
протестировано с помощью этого вывода из последней
команды:
root pts/1 Tue Feb 18 13:38 still logged in
root pts/1 Tue Feb 18 13:17 - 13:38 (00:20)
root pts/0 Tue Feb 18 07:27 still logged in
root pts/1 Mon Feb 17 09:29 - 17:08 (07:39)
root pts/0 Fri Jan 31 09:50 - 13:54 (04:03)
root pts/1 Tue Jan 28 09:19 - 17:11 (07:52)
root pts/0 Mon Jan 27 13:58 - 18:01 (3+04:02)
root pts/0 Wed Dec 18 11:54 - 12:18 (00:24)
root pts/0 Tue Dec 17 17:24 - 19:27 (02:02)
root pts/1 Tue Dec 17 16:30 - 16:44 (00:13)
или при изменении вашего примера сценария:
countLogin=$(last -R "$USER" | grep -c $(LC_ALL=en_US.utf8 date +%b))
# check if equals 1
if [ "$countLogin" -eq 1 ] ; then
notify-send "first login!!!!"
fi