Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Центрирование выводимого текста в BASH-скриптах  (Прочитано 2162 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Озадачившись вопросом возможности центрирования выводимого текста в 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


andrey_p

  • Гость
% a=hello; python -c 'print "'$a'".center('`tput cols`')'А sed тоже внешняя команда. :)

Оффлайн andrew_bye

  • Автор темы
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
А sed тоже внешняя команда. :)

Да, но в отличие от python'а, она идет "в комплекте" с BASH. ;)

 

Страница сгенерирована за 0.054 секунд. Запросов: 25.