Я столкнулся с этой проблемой недавно при установке нового сервера, который требовал от меня входа в крошечную подсказку входа на микропечать. Это было моё (специфичное для Debian) исправление.
Вы можете установить шрифт консоли следующим образом:
$ sudo dpkg-reconfigure console-setup
Сначала выберите кодировку. Вы почти наверняка захотите UTF-8.
Затем выберите набор символов. Вы, вероятно, захотите использовать значение по умолчанию. Если есть сомнения и вы используете английский или аналогичный язык письма, вам, вероятно, понадобится Latin1 / Latin5.
Теперь выберите шрифт консоли.Шрифты «Fixed», «Terminus», «Terminus Bold» и «VGA», кажется, имеют лучший выбор с точки зрения доступных размеров шрифта, особенно «Terminus / Terminus Bold». (Я обнаружил, что Terminus Bold самый простой для глаз; ваш опыт может отличаться.)
Наконец, выберите размер шрифта. Небольшое объяснение по порядку ... 8x14 и 8x16 - это малый конец того, что вы можете получить, а 14x28 и 16x32 - на большом конце. Если текст вашей консоли изначально был крошечным (как у меня) и вам нужно что-то побольше, вам, вероятно, понадобится 14x28 или 16x32.
Увы, чтобы изменения были постоянными, нам нужно создать сценарий запуска. Введите эту команду:
$ sudo nano /etc/init.d/setupcon-initial
Дайте файлу именно такое содержимое:
#!/bin/bash
/bin/setupcon
Чтобы сохранить и выйти, нажмите Ctrl-x, затем y, затем введите.
Затем выполните следующие команды, чтобы сделать новый скрипт исполняемым и зарегистрировать его для запуска по умолчанию:
$ sudo chmod 755 /etc/init.d/setupcon-initial
$ sudo update-rc.d setupcon-initial defaults
Вы можете спокойно игнорировать любые предупреждения об отсутствующих тегах и переопределениях; сценарий будет нормально работать и без них.
При следующей перезагрузке запросы входа в консоль должны отображаться с выбранным шрифтом и размером консоли. (Я тестировал это в Debian 9 / Stretch перед публикацией, потому что мой сервер Debian 8 / Jessie не имеет подключенного монитора. Принцип должен быть таким же в любом случае.)
Вы можете попробовать
date +%s -d"$(( ( $(date +%w)==5 )?3:1 ))days 8:00"
РЕДАКТИРОВАТЬ :, чтобы ответить на ваш комментарий :date +%w
выдает день недели, который затем оценивается «условным оператором» (expr?expr:expr
):, если expr1 оценивается как TRUE, оценивается и используется expr2, иначе expr3. Итак, в пятницу у нас день 5, и пробег date +%s -d"3days 8:00
, в остальные дни date +%s -d"1days 8:00
.
Вот что я придумал для аналогичной нужды. Намного более подробный, чем другой ответ, но это может сделать его более очевидным, что он делает.
last_workday() {
from_date="${@:-today}"
day_of_week=$(date +%w --date="${from_date}")
if [ ${day_of_week} = "0" ] ; then
look_back=2
elif [ ${day_of_week} = "1" ] ; then
look_back=3
else
look_back=1
fi
date -d "${from_date} - ${look_back} day" +'%Y/%m/%d'
}
next_workday() {
from_date="${@:-today}"
day_of_week=$(date +%w --date="${from_date}")
if [ ${day_of_week} = "5" ] ; then
look_forward=3
elif [ ${day_of_week} = "6" ] ; then
look_forward=2
else
look_back=1
fi
date -d "${from_date} + ${look_forward} day" +'%Y/%m/%d'
}
for i in $(seq 16); do
now=$(date +'%Y/%m/%d' --date="today + ${i} day")
prev=$(last_workday "${now}")
next=$(next_workday "${now}")
echo "${now}: ${prev} ${next}"
done
Если вы хотите использовать ksh93
, вы можете легко вычислить «следующий будний день 08:00», что, я полагаю, действительно означает первый рабочий день следующей недели. Если вы находитесь в США, первым рабочим днем недели обычно является понедельник.
$ printf "%T\n"
Tue Jan 5 16:04:37 GMT 2021
$ printf "%T\n" "0 8 * * 1"
Mon Jan 11 08:00:00 GMT 2021
$ printf "%(%s)T\n" "0 8 * * 1"
1610352000
$
Ключом к тому, как это работает, является строка "0 8 * * 1"
, которая представляет пять crontab
полей времени и даты. См. справочную страницу crontab(5)
для получения подробной информации об этих полях.
Немногие знают, что ksh93
форматирование времени распознает определенные части этого квази--формата записи crontab и выводит соответствующую дату в назначенном формате.