Intereting Posts
как проследить представление из команды df в случае новой точки монтирования Очистка пространства подкачки во время работы Как удалить каталог с «Слишком много уровней символических ссылок» Как я могу скомпилировать программу C, которую я редактировал в Vi или Vim? Как установить менеджер пакетов debian во встроенную систему? PPTP VPN не работает с маршрутизатором Linux Перезагрузка Asus UX303UA вместо возобновления с приостановки (ubuntu 15.10) configure: ошибка: библиотека libcurl> = 7.28.0 и заголовки требуются с поддержкой https Загрузка сценариев netplan из необязательной цели монтирования Не удается установить eCryptfs gythub gist snippet management Эмуляция адаптера Bluetooth LE для проведения приемочного тестирования Как я могу создать сценарий создания одного раздела, который использует все устройство? Различия между виртуальными интерфейсами Atheros (ath0 и т. Д.) И несколькими физическими Какой драйвер для Intel HD Graphics следует установить?

Как называется переменная окружения (?) С текущей шириной терминала?

Я знаю, что это что-то простое, но я не могу вспомнить, где он находится / назван.

Где хранится переменная для текущей ширины терминала?

Я вижу, что этот ответ говорит об изменении вещей: как длина и ширина терминала передаются через SSH и telnet?

Но я хотел бы получить текущее значение, для использования в скрипте (и я не понимаю все в этом ответе).

Когда-то я вспоминаю, что есть какой-то способ отобразить все переменные среды? (Хм, я вижу ответ, который говорит, что используется set (vs. env ), но мой set показывает только LINES, а не ширину?)


Тогда, конечно, это будет следующая проблема; как только у меня есть этот номер $, я бы много раз повторял символ («-»), чтобы сделать пунктирную линию с X-символами (заполняет терминал, без упаковки). Если у вас есть элегантный способ, я должен это делать, я был бы признателен за это.

СТАТИЧЕСКИЙ РАЗМЕР

Канонический способ – спросить терминал о его фактическом размере, когда вы хотите его узнать

 stty size 

печатает столбцы ROWS.

Распечатайте пунктирную линию

О вашем втором вопросе, seq – ваш друг

 stty size|if read rows cols then for x in `seq $cols` do printf "-" done fi 

или за цикл awk

 stty size|awk '{ ORS="-"; n=$2; for (i=0; i<n; ++i) { print ""; } }' 

,

Задайте переменную строки

Но на самом деле было бы лучше сохранить нашу строку в переменной

 eval $(L=""; stty size|if read rc then for x in `seq $c` do L="${L}-" done echo L="$L" fi ) 

Ловушка на SIGWINCH

Пока нам не нужно пересчитывать размер терминала

 trap 'echo "recalculate L"' SIGWINCH 

теперь мы можем использовать $L для печати строки. Конечно, вы можете автонастроить переменную $L на SIGWINCH :

 trap 'eval $(L=""; stty size|if read rc then for x in `seq $c` do L="${L}-" done echo L="$L" fi )' SIGWINCH 

, В терминале, где вы настроились, такую trap можно просто сказать

 echo $L 

и все готово.

Он set в COLUMNS.

 echo $COLUMNS 

или

 set | grep -i columns 

в bash.

Я считаю, что вы можете искать $COLUMNS .

Что касается того, чтобы сделать диапазон символов всей шириной терминала, это простой цикл, основанный на значении $COLUMNS . Если экран будет изменен с помощью этой строки в истории, они выглядят довольно неприятно.

Нет переменной среды, которая содержит ширину терминала. Существует переменная оболочки : COLUMNS (а также LINES для высоты). Это только переменная оболочки, она не видна программам, вызываемым оболочкой.

Причина COLUMNS – это только переменная оболочки и не экспортируется в среду, так это то, что когда переменная находится в среде, оболочка не может ее изменить. Если вы измените размер терминала, оболочка (или, в общем, любая программа на переднем плане) получит сигнал SIGWINCH . Когда оболочка получает SIGWINCH, он запрашивает терминал для текущего размера и соответственно обновляет COLUMNS и LINES .

В set команд перечислены все переменные оболочки, поэтому они включают COLUMNS и LINES . Команды env и export перечисляют только переменные среды, поэтому они не включают COLUMNS и LINES .

Вы можете экспортировать COLUMNS чтобы сделать его переменной окружения. Но учтите, что к моменту, когда приложение его использует, информация может быть устаревшей, если в то же время был изменен размер терминала. Приложение может запрашивать размер терминала так же, как и терминал¹, и регистрировать обработчик для сигнала SIGWINCH, чтобы он мог обновлять информацию.

¹ Посылая правильные команды ioctl . Или даже при вызове stty size или tput cols .