что делает & ldquo; export TERM = linux & rdquo; на самом деле делать, когда внутри скрипта

Мой скрипт bash запускает лишний шум при запуске внутри сервера с помощью ssh.

+ sudo apt-get install -yqq nodejs debconf: unable to initialize frontend: Dialog debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (This frontend requires a controlling tty.) debconf: falling back to frontend: Teletype dpkg-preconfigure: unable to re-open stdin:

В одном из предложений, которые я видел, был сделан экспорт TERM = linux

Are там какая-то сторона влияет? Это хорошая идея сделать в начале скрипта, например:

#!/bin/bash set -e set -x TERM=linux
4
задан 1 June 2017 в 04:39

6 ответов

Команда export TERM=linux устанавливает эмулятор терминала в linux.

Значение по умолчанию для Ubuntu по умолчанию - xterm. Вы можете проверить свою настройку TERM, запустив echo TERM.

Возможно, вам придется проверить у поставщика приложения, что вы используете, чтобы найти лучший рекомендуемый эмулятор терминала для своей программы. Большинство приложений ожидают, что у вас уже есть эмулятор, установленный на что-то совместимое, например xterm или linux.

TERM Параметр отладки: вы ссылаетесь на шумный скрипт. Вы получаете подробный вывод из вашего скрипта из-за настроек set -x, которые используются для отладки. Когда вы видите, что происходит, и ваш скрипт работает так, как вы этого хотите, вы можете прокомментировать строку set -x, поставив перед ним символ #.

set -e ] Этот параметр сообщает сценарию выйти из командной ошибки. Например, если ваша команда заключалась в том, чтобы сменить каталог на какой-либо существующий каталог или перечислить несуществующий файл, сценарий завершится ошибкой, а не перейдет к следующей строке.

Ваша проблема с ssh через сервер, в который вы входите в систему, может привести к тому, что по умолчанию сервер пытается сопоставить эмулятор терминала настроек с компьютера, с которого вы входите. Если он не соответствует, он не знает, какие настройки вы можете обрабатывать. Для этого вам нужно будет использовать команду export TERM, чтобы указать серверу, как общаться с вами.

3
ответ дан 18 July 2018 в 12:23

Нет смысла устанавливать TERM, если TTY не выделен. Если вы используете SSH, используйте ssh -t:

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Обратите внимание на следующие ошибки:

debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.) ... debconf: (This frontend requires a controlling tty.)
1
ответ дан 18 July 2018 в 12:23

Согласно странице руководства GNU gettext, переменная TERM «... содержит идентификатор возможностей текстового окна». Другими словами, он просто сообщает системе, какой терминал вы используете, и как текст на экране должен быть адаптирован.

TERM=linux означает, что вы предположительно собираетесь использовать консоль Linux, поэтому выход будет минималистичным, возможно, не поддерживает некоторые языки.

Как заметил муру, вам действительно нужно назначить псевдо-tty. Изменение параметра TERM может помочь, но TERM=linux не то, что вы хотите. Вы не используете настоящую консоль Linux. Опция -t для ssh лучше подходит.

1
ответ дан 18 July 2018 в 12:23

Команда export TERM=linux устанавливает эмулятор терминала в linux.

Значение по умолчанию для Ubuntu по умолчанию - xterm. Вы можете проверить свою настройку TERM, запустив echo TERM.

Возможно, вам придется проверить у поставщика приложения, что вы используете, чтобы найти лучший рекомендуемый эмулятор терминала для своей программы. Большинство приложений ожидают, что у вас уже есть эмулятор, установленный на что-то совместимое, например xterm или linux.

TERM Параметр отладки: вы ссылаетесь на шумный скрипт. Вы получаете подробный вывод из вашего скрипта из-за настроек set -x, которые используются для отладки. Когда вы видите, что происходит, и ваш скрипт работает так, как вы этого хотите, вы можете прокомментировать строку set -x, поставив перед ним символ #.

set -e ] Этот параметр сообщает сценарию выйти из командной ошибки. Например, если ваша команда заключалась в том, чтобы сменить каталог на какой-либо существующий каталог или перечислить несуществующий файл, сценарий завершится ошибкой, а не перейдет к следующей строке.

Ваша проблема с ssh через сервер, в который вы входите в систему, может привести к тому, что по умолчанию сервер пытается сопоставить эмулятор терминала настроек с компьютера, с которого вы входите. Если он не соответствует, он не знает, какие настройки вы можете обрабатывать. Для этого вам нужно будет использовать команду export TERM, чтобы указать серверу, как общаться с вами.

3
ответ дан 24 July 2018 в 19:57
  • 1
    команды набора не задавались – american-ninja-warrior 1 June 2017 в 05:58
  • 2
    Я имел в виду вашу ссылку Are there any side affects? Is it a good idea to do at the beginning of the script, like this:. Когда вы так сказали, вы помещаете три строки. Я описал их использование, чтобы вы могли рассмотреть их намерения в сценарии. Ваша ссылка на busy для ваших скриптов звучала так, как если бы вы использовали опцию set -x. Я не был уверен, что это ваш скрипт или сценарий, который поставляется с пакетом, который вы пытались оптимизировать, но не прерывать. – L. D. James 1 June 2017 в 06:04

Нет смысла устанавливать TERM, если TTY не выделен. Если вы используете SSH, используйте ssh -t:

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Обратите внимание на следующие ошибки:

debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.) ... debconf: (This frontend requires a controlling tty.)
1
ответ дан 24 July 2018 в 19:57

Согласно странице руководства GNU gettext, переменная TERM «... содержит идентификатор возможностей текстового окна». Другими словами, он просто сообщает системе, какой терминал вы используете, и как текст на экране должен быть адаптирован.

TERM=linux означает, что вы предположительно собираетесь использовать консоль Linux, поэтому выход будет минималистичным, возможно, не поддерживает некоторые языки.

Как заметил муру, вам действительно нужно назначить псевдо-tty. Изменение параметра TERM может помочь, но TERM=linux не то, что вы хотите. Вы не используете настоящую консоль Linux. Опция -t для ssh лучше подходит.

1
ответ дан 24 July 2018 в 19:57

Другие вопросы по тегам:

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