Метка @
указывает на то, что строка слишком длинная для отображения. vi по-прежнему должен отслеживать позицию до / после строки, и если она достаточно длинная, вы наверняка заметите «некоторое» замедление при чтении данных и попытке пройти мимо этой строки.
Дополнительная литература:
COLUMNS=$(tput cols)
Или в одной строке
sha512sum <filename> | cut -c -"$(tput cols)"
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
, потому что нет терминала. Но все они пригодны для использования в терминале.