ссылочная переменная оболочки $ COLUMNS из сценария bash

Это выполняется как ожидалось в xterm: sha512sum <filename> | cut -c -$COLUMNS sha512sum <filename> | cut -c -$COLUMNS , но не внутри #! /bin/bash #! /bin/bash например dothis.sh <args> , потому что $COLUMNS неизвестно, так сказать.

Я бы предпочел не передавать $ COLUMNS в качестве аргумента и не экспортировать его в среду.

Сценарий не критичен, его нужно запускать только на одной машине, в командной строке в xterm.

 Linux pre 3.2.0-4-amd64 #1 SMP Debian 3.2.81-2 x86_64 GNU/Linux GNU bash, version 4.2.37 XTerm(278) 

2 Solutions collect form web for “ссылочная переменная оболочки $ COLUMNS из сценария bash”

 COLUMNS=$(tput cols) 

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

 sha512sum <filename> | cut -c -"$(tput cols)" 

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

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

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

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

    40

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

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

    40 80

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

     КОЛОННЫ = 80;
     ЛИНИИ = 40;
     экспорт COLUMNS LINES;

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

  • Сценарий для копирования файла на удаленный хост и его переименования
  • Как закрепить определенный тип файла в каталоге
  • Как печатать все подмножества набора?
  • Насколько надежны / переносимы Nix-встроенные / команды (echo, ps, sort, uniq) из Debian в другие дистрибутивы
  • «Список аргументов слишком длинный» для цикла
  • Какая цель служит толстой кишки?
  • BASH: проблемы с Fifo - кажется избирательным в отношении ввода
  • Как назначить значения матрицы переменным в bash
  • Захват определенного столбца из вывода команды
  • Как я могу выполнить эхо-вывод команды, которая ничего не возвращает / null?
  • Инструмент для создания текстовых файлов из шаблона
  • Linux и Unix - лучшая ОС в мире.