Проверка того, является ли завтра первым днем ​​месяца, не работает в сценарии bash

Я не прочитал в описании вашей проблемы ничего, что мешало бы вам создавать разные учетные записи пользователей для приложений. Затем вы можете использовать тривиальные права доступа к файлам для предотвращения помех :

.
chown app1 /var/lib/myapps/app1
chmod 700 /var/lib/myapps/app1
sudo -u app1 /var/lib/myapps/app1/run.sh

редактировать

Если оценщик работает как root, он может просто запускать приложения через sudo.

Если оценщик не запускается как root, тогда приложения, которые он вызывает (обычным способом ), могут быть установлены с битом SUID (, установленным идентификатором пользователя ), чтобы процесс выполнялся как пользователь, которому принадлежит двоичный файл, а не как пользователь процесса оценки.

1
01.12.2019, 20:22
2 ответа

Собрав воедино некоторые комментарии выше, с датой GNU вы можете проверить, будет ли завтра первый день месяца с помощью:

if [[ "$(date -d tomorrow +%d)" == "01" ]]; then
    echo "Tomorrow is the first day of the month"
fi

Если вы хотите узнать, последний ли день месяца завтра, вы можете аналогичным образом:

if [[ "$(date -d "2 days" +%d)" == "01" ]]; then
    echo "Tomorrow is the last day of the month"
fi
2
27.01.2020, 23:29

Возможно, ваша проблема связана с тем, что ваш местный часовой пояс на самом деле не соответствует UTC. Лучший способ получить смещение времени с помощью GNU date— это использовать его опцию -dс аргументом, описывающим дату, которую вы хотели бы использовать в качестве ссылки, вместо «сейчас» (, как показано в Энди. ответ). Если вы дополнительно хотите получить ответ в формате UTC от GNU date, используйте его опцию -u.

Без использования GNU date, в bashверсии 4.3+:

#!/bin/bash

# Unix timestamp "now"
printf -v now '%(%s)T'    # append "-1" as argument to get it working in bash 4.2

# Today's weekday, 1-7, 1=Monday
printf -v today_day '%(%u)T' "$now"

# Tomorrow's date, 1-31
printf -v tomorrow_date '%(%e)T' "$(( now + 24*60*60 ))"

if [ "$tomorrow_date" -eq 1 ]; then
    echo Today is the last day of the month
elif [ "$today_day" -eq 7 ]; then
    echo Today is Sunday
else
    echo Today is some other day
fi
0
27.01.2020, 23:29

Теги

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