обращение к переменной оболочки $COLUMNS внутри bash-скрипта

Метка @ указывает на то, что строка слишком длинная для отображения. vi по-прежнему должен отслеживать позицию до / после строки, и если она достаточно длинная, вы наверняка заметите «некоторое» замедление при чтении данных и попытке пройти мимо этой строки.

Дополнительная литература:

6
19.10.2016, 08:04
2 ответа
COLUMNS=$(tput cols)

Или в одной строке

sha512sum <filename> | cut -c -"$(tput cols)"
4
29.04.2021, 00:08

bash устанавливает переменные оболочки COLUMNS и LINES в режиме interactive (были проблемы с функцией checkwinsize, которые привели к этому различию). Вы можете получить эту информацию по-разному.

Из контекста вопроса вы знаете, как сделать скрипт оболочки, но не уверены, где взять полезные данные.

В моем окне есть 40 строк, 80 столбцов:

  • tput cols сначала пробует переменные среды (так как они не установлены в вашей среде, это так же хорошо), затем пробует настройки терминала системы, а затем описания терминалов. Размещение размера в описании терминала больше не делается; это костыль, используемый приложениями termcap (такими как bash). Вы получите только одно число, например,

    40

    Из-за исторического сбоя в системе FreeBSD (см. history и переносимость примечания), вам придется использовать tput co,потому что (хотя ncurses с terminfo используется в качестве системной библиотеки), ncurses's tput не используется во FreeBSD. NetBSD и OpenBSD, конечно, ушли в другие касательные.

  • stty size (доступен на многих платформах) дает значения строк/столбцов из настроек терминала - или ничего, если они недоступны. Он дает только два числа, которые можно легко разделить в оболочке:

    40 80

  • resize пытается использовать сам терминал (используя escape-последовательности) и обновляет настройки терминала в соответствии с ними. Для bash вы бы использовали resize -u, давая вывод следующим образом:

    COLUMNS=80;
    LINES=40;
    export COLUMNS LINES;

Ни один из этих вариантов не очень полезен в cron, потому что нет терминала. Но все они пригодны для использования в терминале.

8
29.04.2021, 00:08

Теги

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