Мой скрипт 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
Команда export TERM=linux устанавливает эмулятор терминала в linux.
Значение по умолчанию для Ubuntu по умолчанию - xterm. Вы можете проверить свою настройку TERM, запустив echo TERM.
Возможно, вам придется проверить у поставщика приложения, что вы используете, чтобы найти лучший рекомендуемый эмулятор терминала для своей программы. Большинство приложений ожидают, что у вас уже есть эмулятор, установленный на что-то совместимое, например xterm или linux.
TERM Параметр отладки: вы ссылаетесь на шумный скрипт. Вы получаете подробный вывод из вашего скрипта из-за настроек set -x, которые используются для отладки. Когда вы видите, что происходит, и ваш скрипт работает так, как вы этого хотите, вы можете прокомментировать строку set -x, поставив перед ним символ #.
set -e ] Этот параметр сообщает сценарию выйти из командной ошибки. Например, если ваша команда заключалась в том, чтобы сменить каталог на какой-либо существующий каталог или перечислить несуществующий файл, сценарий завершится ошибкой, а не перейдет к следующей строке.
Ваша проблема с ssh через сервер, в который вы входите в систему, может привести к тому, что по умолчанию сервер пытается сопоставить эмулятор терминала настроек с компьютера, с которого вы входите. Если он не соответствует, он не знает, какие настройки вы можете обрабатывать. Для этого вам нужно будет использовать команду export TERM, чтобы указать серверу, как общаться с вами.
Нет смысла устанавливать 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.)Согласно странице руководства GNU gettext, переменная TERM «... содержит идентификатор возможностей текстового окна». Другими словами, он просто сообщает системе, какой терминал вы используете, и как текст на экране должен быть адаптирован.
TERM=linux означает, что вы предположительно собираетесь использовать консоль Linux, поэтому выход будет минималистичным, возможно, не поддерживает некоторые языки.
Как заметил муру, вам действительно нужно назначить псевдо-tty. Изменение параметра TERM может помочь, но TERM=linux не то, что вы хотите. Вы не используете настоящую консоль Linux. Опция -t для ssh лучше подходит.
Команда export TERM=linux устанавливает эмулятор терминала в linux.
Значение по умолчанию для Ubuntu по умолчанию - xterm. Вы можете проверить свою настройку TERM, запустив echo TERM.
Возможно, вам придется проверить у поставщика приложения, что вы используете, чтобы найти лучший рекомендуемый эмулятор терминала для своей программы. Большинство приложений ожидают, что у вас уже есть эмулятор, установленный на что-то совместимое, например xterm или linux.
TERM Параметр отладки: вы ссылаетесь на шумный скрипт. Вы получаете подробный вывод из вашего скрипта из-за настроек set -x, которые используются для отладки. Когда вы видите, что происходит, и ваш скрипт работает так, как вы этого хотите, вы можете прокомментировать строку set -x, поставив перед ним символ #.
set -e ] Этот параметр сообщает сценарию выйти из командной ошибки. Например, если ваша команда заключалась в том, чтобы сменить каталог на какой-либо существующий каталог или перечислить несуществующий файл, сценарий завершится ошибкой, а не перейдет к следующей строке.
Ваша проблема с ssh через сервер, в который вы входите в систему, может привести к тому, что по умолчанию сервер пытается сопоставить эмулятор терминала настроек с компьютера, с которого вы входите. Если он не соответствует, он не знает, какие настройки вы можете обрабатывать. Для этого вам нужно будет использовать команду export TERM, чтобы указать серверу, как общаться с вами.
Нет смысла устанавливать 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.)Согласно странице руководства GNU gettext, переменная TERM «... содержит идентификатор возможностей текстового окна». Другими словами, он просто сообщает системе, какой терминал вы используете, и как текст на экране должен быть адаптирован.
TERM=linux означает, что вы предположительно собираетесь использовать консоль Linux, поэтому выход будет минималистичным, возможно, не поддерживает некоторые языки.
Как заметил муру, вам действительно нужно назначить псевдо-tty. Изменение параметра TERM может помочь, но TERM=linux не то, что вы хотите. Вы не используете настоящую консоль Linux. Опция -t для ssh лучше подходит.