Ошибка переменной окружения «TERM» при выполнении сценария на удаленном хосте с SSH -T - PullRequest
0 голосов
/ 15 мая 2019

Ошибка «переменная окружения TERM не установлена» возникает, когда «bash_script.sh» вызывает «other_bash_script.sh» и запускает его через SSH на удаленном сервере.

TERM environment variable not set

Я проверил, установлена ​​ли переменная TERM на локальном и удаленном серверах:

set | grep TERM TERM=xterm-256color

Я использовал флаг -p в конце строки 'Shebang' в обоих скриптах, но это не помогло, поэтому я удалил это.

Я тоже сделал

export TERM=xterm

в качестве 2-й строки bash_script.sh без изменений и сделал то же самое в 'other_bash_script.sh', что привело к другой ошибке:

top: failed tty get

Я удалил эту строку, поскольку она ничего не решала

Я использовал предложения из этих двух популярных ответов stackoverflow, но они не помогли;

переменная среды TERM не установлена ​​

как удалить «переменная окружения TERM не установлена»

Это содержимое 'bash_script.sh'

ssh -T user@lab < other_bash_script.sh

Вывод из «other_bash_script.sh» успешно выводится на экран, но в любом случае я все равно получаю: '' 'Переменная окружения TERM не установлена' ''

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Redirect stderr на / dev / null /

2>/dev/null

например ssh -T user @ lab / dev / null

Если скрипт не интерактивный, ему не нужен терминал. Если скрипт завершается корректно, то ошибка не требует исправления или подавления, но перенаправление stderr в / dev / null работает.

Принудительная установка терминала с опцией SSH -t может не работать. В дополнение к исходной ошибке я также получил:

Псевдо-терминал не будет выделен, потому что stdin не является терминалом

Принудительное использование терминала с SSH -t -t (Multiple -t) устраняет условие ошибки и, следовательно, сообщение об ошибке, но приводит к мусору терминала.

Большое спасибо Kurtis Rader, его ответ Почему вы используете ssh -T? ... , который не работал для меня, но подстегнул меня, чтобы найти это решение и дополнительную информацию об использовании:

-T, -t & Multiple -t flags

в следующем сообщении StackOverflow Псевдотерминал не будет выделен, поскольку stdin не является терминалом , а также в сообщении serverfault.com В чем преимущество не выделения терминала в ssh?

0 голосов
/ 15 мая 2019

Почему вы используете ssh -T? Это отключает выделение pty. Что, если вы попытаетесь запустить такие команды, как top, приведет к их сбою, так как не будет pty / tty. Неинтерактивный ssh-сеанс также не передает TERM в удаленную систему, поэтому вы получаете сообщение об ошибке «Не задана переменная среды TERM». Вы также утверждаете, что подтвердили, что TERM установлено в удаленной системе, но вы только показали нам, что подтвердили, что оно установлено в локальной системе.

Решение состоит в том, чтобы сделать ssh -t для принудительного выделения pty даже для того, что в противном случае было бы неинтерактивным сеансом ssh.

...