Я понимаю, что это сообщение 15-летней давности, но оно первое по запросу о том, как установить ширину терминала ssh, и в нем на самом деле не дается ответ на вопрос. Позвольте объяснить, в чем проблема, и привести пример данных, чтобы вы могли увидеть, в чем дело. На хосте BSD в моей сети я выполнил команду sudo hostname this-is-a-really-long-hostname-because-i-am-testing-something. На протяжении нескольких минут эта виртуальная машина считает, что у нее абсурдно длинное имя хоста. Затем на этой виртуалке я запускаю sudo service netif restart. Это приводит к тому, что хост повторно запрашивает свой DHCP-лизинг, отправляя это глупое имя хоста DHCP-серверу на моем маршрутизаторе. Теперь, как и у автора поста, я отправляю команды на свой Mikrotik (модель: RB4011iGS+, версия: r2, текущая прошивка: 7.10.1, routeros 7.14.3), авторизуясь с помощью SSH-ключа. Если я захожу интерактивно через SSH с терминального окна, которое широко на моем экране, я могу выполнить: /ip/dhcp-server/lease/print where address=“172.30.2.28” и вижу следующее: Flags: D - DYNAMIC
Columns: ADDRESS, MAC-ADDRESS, HOST-NAME, SERVER
# ADDRESS MAC-ADDRESS HOST-NAME SERVER
0 D 172.30.2.28 6E:15:09:09:26:56 this-is-a-really-long-hostname-because-i-am-testing-something marmite ЭТО ТОТ ВЫВОД, КОТОРЫЙ Я ХОЧУ. Это хорошо. Все, что я хочу сделать, это получить этот точный вывод в неинтерактивном виде. Если я выполню /ip/dhcp-server/lease/print file=test.txt where address=“172.30.2.28” и затем посмотрю содержание test.txt, я увижу: # 2024-12-07 10:26:42 by RouterOS 7.14.3
# software id = XXXX-XXXX
#
Flags: D - DYNAMIC
Columns: ADDRESS, MAC-ADDRESS
# ADDRESS MAC-ADDRESS
112 D 172.30.2.28 6E:15:09:09:26:56 Вся колонка HOST-NAME была опущена. Я предполагаю, что это связано с тем, что она слишком широка для той длины строки, которую использует команда print. Если это по какой-то другой причине, что мне нужно сделать, чтобы это изменить? Если я выполню ssh gw ‘/ip/dhcp/lease/print where address=“172.30.2.28”’ чтобы просто получить вывод ип-лизинга неинтерактивно (типо того, что можно было бы вставить в скрипт), я получаю тот же вывод: Flags: D - DYNAMIC
Columns: ADDRESS, MAC-ADDRESS
# ADDRESS MAC-ADDRESS
17 D 172.30.2.28 6E:15:09:09:26:56 Если я использую опцию brief, как предложено в этой теме, я все равно не получаю колонку HOST-NAME. Если я использую опцию detail, я получаю полное имя хоста, но теперь вывод в формате многострочного блока, который мне нужно разбить. Что я действительно хочу, так это IP-адрес и имя хоста и ничего больше. И мне не важна длина строки. На дворе 2024 год, и у меня нет никакого DEC VT100, который физически ограничивал бы количество букв на экране. Было бы классно, если бы это был JSON-формат, но я возьму текст, который не отбрасывает целые колонки. Документация по интерфейсу командной строки говорит, что ширина строки контролируется параметрами после имени пользователя. Это действительно необычно, но неважно. Приводится следующий пример: “ admin+c80w - отключит цвета консоли и установит ширину терминала в 80 ”. Итак, я пробую ssh marmite+c80w@gw и действительно, получаю интерактивную SSH-сессию, и цвет отключен, как я и ожидал. Тем не менее, мое фактическое окно терминала намного шире 80 символов, и когда я выполняю команду /ip/dhcp/lease/print, я получаю полную колонку имени хоста. Вывод значительно шире 80 символов. Таким образом, флаг ‘c’ для отключения цвета, похоже, работает, но часть 80w, похоже, не дает ожидаемого эффекта. Аналогично, выполнение ssh marmite+2000w@gw '/ip/dhcp/lease/print where address=“172.30.2.28”’ все равно дает мне вывод без колонки имени хоста, даже несмотря на то, что теоретически я сказал, что мне нравится ширина в 2000 символов. (Я также пробовал некоторые меньшие значения, такие как 110w и 130w). Так как же мне заставить команду /ip/dhcp/lease/print выводить действительно широкий вывод, когда я использую неинтерактивное SSH-соединение для ее выполнения?