Что управляет пределами расширения фигурной скобки оболочки?

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

Эти библиотеки используют одну из двух баз данных, названных termcap и terminfo. ² Эти базы данных содержат карты, которые говорят библиотеке, что коды отправить для получения желаемых действий с большим количеством разнообразного терминала вводит. Подавляющее большинство терминала вводит, Вы найдете определенным в этих базах данных, не пережил дни реальных терминалов и так являются теперь только, представляющими исторический интерес.

Терминалы ANSI

Современные эмуляторы терминала Unix ³ используют протокол ANSI X3.64 или один из его более поздних вариантов:

  • ANSI X3.64: стандарт для управления "стеклянными терминалами" — в противоположность телетайпам — это основано на специальных последовательностях символов, которые интерпретирует удаленный терминал. Например, если поле Unix хочет сказать ANSI X3.64 совместимый терминал для перемещения его курсора в левый верхний угол экрана, это отправляет символы ESC [ 1 ; 1 H. Первые два символа говорят терминалу ожидать управляющую последовательность, 1 с строка и столбец, и H команда, означающая "курсор перемещения". ⁴

    Мелочи: многие ПК BBSes использовали коды ANSI, также. (Все еще сделайте на самом деле.)

  • DEC VT100: первый действительно популярный совместимый с ANSI стеклянный терминал был VT100 Digital Equipment Corporation. Путем доказательства стандарта де-юре ANSI на рынке, это установило фактический стандарт, который все еще важен сегодня.

    Иногда Вы видите названный протоколом VT102, при этом тот уменьшенное до стоимости более позднее — и поэтому более популярный — версия VT100 плюс все доступные встроенные опции расширения.

    Протоколы терминала DEC являются назад совместимым рядом, расширяющимся из первой совместимой с ANSI модели, представленной в 1978 (VT100) через модели серии VT500, произведенные Boundless Technologies после того, как они купили терминальный бизнес у DEC в 1995. (Boundless теперь банкротом, но их терминалы все еще время от времени открываются на используемом рынке.)

  • xterm: Своего рода амальгама ANSI и стандартов VT-whatever. Каждый раз, когда Вы используете эмулятор терминала GUI как xterm или одна из его производных, Вы обычно также используете xterm терминальный протокол, обычно более современное xterm-color или xterm-color256 варианты.

  • Linux: консоль Linux также использует расширенный вариант протокола терминала ANSI в том же духе как xterm протоколы. Большинство его расширений имеет отношение к различиям между ПК и стеклянным терминалом. Например, клавиатура IBM имеет некоторые ключи не на VT-whatever DEC. (И наоборот.)

    Некоторые системы Unix имеют свой собственный консольный протокол терминала, также. Существует scoansi Вариант ANSI X3.64 для SCO Unixes, например.

Типичная программа эмулятора терминала является чем-то вроде полукровки и не эмулирует единственной терминальной модели точно. Это могло бы поддерживать 96% всех escape-последовательностей VT DEC через VT320, все же также поддерживать расширения как цвет ANSI (функция VT525) и произвольное число строк и столбцов. 4% кодов, которые это не понимает, не могут быть пропущены, если для Ваших программ не нужны те функции, даже при том, что Вы сказали curses (или безотносительно), что Вы хотите программы с помощью него для использования протокола VT320. Такая программа могла бы рекламировать себя как совместимый VT320, затем, даже при том, что строго говоря это не. ⁵

Терминалы неANSI

Существует несколько других известных стандартов, с которыми Вы все еще иногда сталкиваетесь:

  • Wyse: Один из самых ранних независимых производителей стеклянных терминалов, Wyse начал делать терминалы в начале 1980-х, прежде чем вычисления рабочей станции начали перемещать миникомпьютеры. Хотя терминалы Wyse смогли эмулировать VT100 и другие популярные терминальные протоколы, у них также были свои собственные собственные коды.

  • IBM 3270: Хотя это не строго тип терминала "Unix", потребность подключить системы Unix к универсальным компьютерам типа IBM, ведомым к созданию серийных программ IBM 3270 эмулятора терминала, которые можно все еще найти используемым. Эмуляторы для более поздних серийных терминалов IBM 5250 также довольно распространены, чаще всего использовал эти дни для соединения с AS/400 и Системой i миникомпьютеров.

  • Tektronix 4014: Прежде чем ПК и рабочие станции в основном переместили стеклянные терминалы и таким образом сделали растровую графику стандартной функцией, были дорогие графические терминалы, которые потянули графику на экране в ответ на текст, управляет подобный escape-последовательностям, описанным выше. Вероятно, самым популярным из них был ряд Tektronix 4010.

    Они были довольно забавны использовать. Вы могли записать программу, которая потянула диаграмму, но затем вместо того, чтобы просто выполнить ее для привлечения локального терминала Вы могли перенаправить его вывод в файл:

    $ ./my4014program > my-neat-graphic
    

    Вы могли затем отправить тот файл кому-то еще, и они могли cat это на их терминале Tek для наблюдения диаграммы, не имея программы. Часть очарования была, насколько медленный эти терминалы были в рисунке, таким образом, Вы могли наблюдать графическую сборку за несколько секунд.

Работа с эмуляцией терминала Unix сегодня

Можно узнать, как какой терминальный стандарт Вы спрашиваете библиотеки curses использовать путем взгляда на TERM переменная среды:

$ echo $TERM
xterm-color

Когда Вы ssh к другой системе, TERM переменную несут вдоль так удаленного поля Unix, знает, как связаться с Вашим локальным терминалом.

Поскольку столь многие из этих протоколов являются вариантами ANSI X3.64, и потому что повсеместный ASCII и стандарты кодировки символов UTF-8 еще заботятся о так, неправильное TERM переменная не является обычно катастрофической. Вещами, которые имеют тенденцию повреждаться, являются расширенные ключи как Домашняя и Page Up, сочетания клавиш Alt-whatever и типографские функции дисплея как цвет, полужирный шрифт, и т.д.


Сноски:

  1. Обычно, ncurses.

    Существуют также прямые конкуренты curses API, такой как Сленг.

  2. AT&T провозглашена terminfo как замена для BSD's termcap база данных, и это было в основном успешно в замене его, но существуют все еще программы там, которые все еще используют старое termcap база данных. Это - один из многих BSD по сравнению с различиями AT&T, которые можно все еще найти в современных системах.

    Мое macOS поле не имеет /etc/termcap, но это действительно имеет /usr/share/terminfo, тогда как стандартная установка FreeBSD является противоположным путем вокруг, даже при том, что эти два Ose часто весьма схожи на уровне командной строки.

  3. minicom, xterm, mintty, Терминал GNOME, Terminal.app, и т.д.

  4. Правильно записанные программы Unix не испускают эти escape-последовательности непосредственно. Вместо этого они пользуются одной из упомянутых выше библиотек, говоря этому "переместить курсор в положение (1,1)" или что бы то ни было, и библиотека испускает необходимые терминальные коды управления на основе Вашего TERM установка переменной среды. Это позволяет программе работать правильно, какой терминал вводят Вас, работает на нем.

  5. Старые текстовые терминалы имели много странных функций, которые не получили большое использование программами, столько популярных программ эмулятора терминала просто не реализует эти опции. Общий пропуск является поддержкой sixel графики и double-width/double-height текстовых режимов.

    Специалист по обслуживанию xterm записал названную программу vttest для тестирования эмуляторов терминала VT такой как xterm. Можно выполнить его против других эмуляторов терминала для обнаружения, какие функции они не поддерживают.

7
28.02.2011, 08:10
2 ответа

echo {1..5} расширен в команду echo 1 2 3 4 5 который затем расширен обычным способом. Это нисколько не подобно seq 1 1000000000 >/dev/null, который никогда не расширяется до команды с очень многими аргументами.

Это больше похоже echo $(seq 1 1000000000): Я предполагаю, что это повреждается таким же образом?

Проблема, с которой Вы сталкиваетесь, относится к обработке больших команд, о которых Unix всегда был суетливым, который должен сказать, что это - общая проблема с обработкой командных строк. Это - одна из вещей, которые Perl был записан для фиксации.

Я зарегистрировал бы вежливый и информативный отчет об ошибках так или иначе: это могло бы вызвать интересное обсуждение.

7
27.01.2020, 20:17
  • 1
    спасибо за ответ. Ваш комментарий, "Это нисколько не подобно seq..." помещенные вещи в резкое облегчение; пенс отбрасывается... Я сейчас Alt-Tabbed для проверки моего Терминала на прогресс echo $(seq 1 1000000000), но Терминал исчез :)... Так, я заключаю, что это не имеет отношения конкретно к также echo или расширение фигурной скобки... и что это - просто вопрос исчерпывания RAM... btw, эта проблема, явилось результатом этого вопроса: unix.stackexchange.com/questions/8273 / … –  Peter.O 28.02.2011, 20:02
  • 2
    @fred: Это мог быть отказ seg, являющийся результатом некоторого внутреннего переполнения буфера, или это мог быть некоторый превышаемый предел ОС и программа, не обрабатывающая состояние ошибки корректно. Обратите внимание, что расширение сделано оболочкой, не терминалом. Возможно, Ваши терминальные программы имеют, "не закрываются на установке" выхода оболочки? Таким образом, Вы могли бы видеть, как оболочка выходит. –  Charles Stewart 01.03.2011, 09:14

Я предполагаю, что это расширение не разработано, чтобы использоваться тот путь. Катастрофический отказ указывает на ошибку, конечно, но редко инициировал ту.

Как практичный делают Вы думаете, что это должно подать миллиард последовательных целых чисел к чему-нибудь?

1
27.01.2020, 20:17
  • 1
    Это не только практично, важно при необходимости в нем... Разработчики seq непрактичный? это может пойти порядки величины выше... Действительно ли это практично? абсолютно (при необходимости в нем), действительно ли это редко? Я не знаю, но я подозреваю так.. но грузовик на магистрали, которую Вы не видите, также редок, но это довольно важно :)... Однако мне нужен он теперь, и я ищу наилучший вариант... Из-за этой 'целочисленной последовательности' катастрофический отказ, это инициировало более широкий вопрос.. "Что управляет пределами расширения фигурной скобки оболочки?" –  Peter.O 28.02.2011, 09:06
  • 2
    @alex: Это не действительно ответ на вопрос, но способ предположить, что вопрос не стоит задавать. А-ч –  iconoclast 14.07.2011, 23:23
  • 3
    , Это не действительно комментарий также. –  alex 15.07.2011, 15:32

Теги

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