Озадачившись вопросом возможности центрирования выводимого текста в BASH-скриптах, после поисков в google я пришел к неутешительному выводу, что штатных средств для этого вроде бы как и не существует.
Дальнейшие поиски привели меня на
эту страницу, где предложен способ решения данной проблемы путем создания соответствующей функции, которую в последующем можно использовать в конвейере с командами вывода.
center(){ C=$(tput cols);IFS="";while read L; do S=$((($C-${#L})/2+${#L}));printf "%${S}s\n" $L;done }
Но, на поверку оказалось, что данная функция некорректно работает при выводе текста с кириллицей. А все потому, что модификаторы форматов команды
printf с кириллицей не работают.
Однако, поскольку алгоритм центрирования текста до безобразия прост, то в результате анализа вышеуказанной функции и ее последующей модификации, удалось получить вполне работоспособный вариант для работы с кириллицей:
center()
{
IFS=""
while read L
do
printf "%b\n" $(printf "%.$((($(tput cols)-${#L})/2))d" 0 | sed 's/0/ /g')$L
done
}
В общем, простейший скрипт с использованием данной функции выглядит примерно так:
#!/bin/bash
center()
{
IFS=""
while read L
do
printf "%b\n" $(printf "%.$((($(tput cols)-${#L})/2))d" 0 | sed 's/0/ /g')$L
done
}
echo "Этот текст будет выведен по центру экрана терминала" | center