Ошибка tput Нет значения для $TERM и не указано -T

У меня есть сценарий оболочки на сервере A, и у меня есть сценарий оболочки на сервере B. Моя логика написана так, как сценарий оболочки на A выполняется, вызывает сценарий оболочки на сервере B и выполняет его. Я могу получить желаемый результат, когда A выполняет B, но также получаю ошибку вместе с результатом. Сообщение об ошибке:

tput: No value for $TERM and no -T specified

Я использую следующие строки для получения цветного вывода;

  RED=`tput setaf 1`
  GREEN=`tput setaf 2`
  YELLOW=`tput setaf 3`
  BLUE=`tput setaf 6`
  BOLD=`tput bold`
  RESET=`tput sgr0`

Эти строки доступны в сценарии оболочки как в A, так и в B. Когда я запускаю сценарий оболочки в B, регистрируясь на сервере B, желаемый результат появляется вместе с цветом. Когда я вызываю сценарий оболочки из A и выполняю его, я получаю желаемый результат плюс сообщение об ошибке, о котором я упоминал выше.

Можете ли вы помочь в этом отношении?

К вашему сведению, я проверил "echo $TERM" и вывел 'xterm' на обоих серверах.

Не уверен, где я ошибаюсь.


person Muthu    schedule 31.01.2018    source источник
comment
Как вы вызываете удаленный скрипт? ssh serverB scriptB </dev/null | less вызовет scriptB, где действительно стандартный вывод скрипта не привязан к терминалу локально.   -  person tripleee    schedule 31.01.2018
comment
Вот как я выполняю скрипт на сервере B с сервера A ssh ‹Server B› /home/wasadmin/test.sh   -  person Muthu    schedule 31.01.2018


Ответы (4)


$TERM будет отключен, когда вы войдете в систему через скрипт. Обойдите цветовое кодирование в этом сценарии или жестко закодируйте опцию tput. (Я настоятельно рекомендую первое.)

RED=; GREEN=; YELLOW=; BLUE=; BOLD=; RESET=; 
case ${TERM} in
  '') ;;
  *)
      RED=`tput setaf 1`
      GREEN=`tput setaf 2`
      YELLOW=`tput setaf 3`
      BLUE=`tput setaf 6`
      BOLD=`tput bold`
      RESET=`tput sgr0`;;
esac
person tripleee    schedule 31.01.2018
comment
Я попытался сначала включить «кейс», который вы предложили на сервере А, но не повезло - person Muthu; 31.01.2018
comment
Затем я попытался использовать этот «кейс» в обоих сценариях (сервер A и сервер B), но безуспешно. - person Muthu; 31.01.2018

Мы предположили, что настройки оболочки или среды на двух серверах различаются, если возможно, вы можете пропустить вывод следующих команд с двух серверов.

ps

Эта команда помогает нам понять, какую оболочку мы используем.

env

Эта команда помогает нам узнать окружающую среду.

person Xu Liu    schedule 31.01.2018

Теперь я могу успешно решить проблему.

ssh <Server B> "TERM=xterm" <script in ServerB>

Желаемый результат вернулся на ServerA с цветами.

person Muthu    schedule 31.01.2018


--› МОЕ РАБОЧЕЕ РЕШЕНИЕ ПРОБЛЕМЫ TPUT:


# when $TERM is empty (non-interactive shell), then expand tput with '-T xterm-256color'
[[ ${TERM}=="" ]] && TPUTTERM='-T xterm-256color' \
                  || TPUTTERM=''

declare -r    RES='tput${TPUTTERM} sgr0'       REV='tput${TPUTTERM} rev'
declare -r    fRD='tput${TPUTTERM} setaf 1'    bRD='tput${TPUTTERM} setab 1'
declare -r    fGN='tput${TPUTTERM} setaf 2'    bGN='tput${TPUTTERM} setab 2'
...
echo ${fRD}" RED Message: ${REV} This message is RED REVERSE. "${RES}
echo ${fGN}" GREEN Message: ${REV} This message is GREEN REVERSE. "${RES}
...

таким образом, нет смысла, интерактивная или неинтерактивная оболочка - tput все равно работает нормально.

6a5h4

person 6a5h4    schedule 04.06.2021