Вопрос или проблема
У меня есть короткий простой скрипт, который компилирует файл .c
и запускает его на удаленном сервере с tcsh
, а затем просто возвращает управление моему компьютеру (это нужно для школы, мне нужно, чтобы мои программы работали правильно на лабораторных компьютерах, но я хочу редактировать их и т.д. на своем компьютере). Он выполняет команды следующим образом:
ssh -T user@server << EOF
cd cs4400/$dest
gcc -o $efile $file
./$efile
EOF
Пока что это работает нормально, но каждый раз, когда я это делаю, появляется это предупреждение:
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
Я знаю, что это технически не проблема, но это СУПЕР раздражает. Я пытаюсь сделать учебную работу, проверяю вывод своей программы и т.д., а это всё засоряет, и я НЕНАВИЖУ это.
Я использую эту версию ssh на своем компьютере:
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
Эту версию tcsh на сервере:
tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux)
И эту версию ssh на сервере:
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
В вашем скрипте, похоже, нет ничего специфичного для tcsh
, так что просто обойдите это. Например:
ssh -T user@server "/bin/bash -ec 'cd cs4400/$dest ; gcc -o $efile $file ; ./$efile'"
Опция -T
ssh отключает пересылку локальных переменных окружения. Поэтому ваша переменная TERM либо отсутствует, либо не определена, в связи с чем ssh не может присвоить подходящий псевдотерминал (pty), что обычно означает, что вы не можете использовать автозаполнение командной строки и элементы управления редактированием командной строки и т.д. Вы можете попытаться исправить ситуацию с помощью:
TERM=vt100 ssh -T user@server ...
Также проверьте ваши переменные окружения с помощью: set
и set -o
.
Ответ или решение
Чтобы подавить предупреждение «Warning: no access to tty (Bad file descriptor). Thus no job control in this shell.» в SSH-сессии, необходимо обратить внимание на использование параметра -T
и тип используемой оболочки на удалённом сервере. Вот подробное объяснение проблемы и возможные пути её решения.
Проблема
Вы используете SSH для запуска скрипта на удалённом сервере, который компилирует и запускает C-программу. Однако при выполнении команды возникает предупреждение, связанное с отсутствием доступа к терминалу (TTY). Это предупреждение появляется из-за того, что SSH не может получить доступ к псевдотерминалу, что может мешать корректной работе некоторых команд и функциональности оболочки.
Причины возникновения предупреждения
Использование опции -T
в SSH отключает выделение терминала, что приводит к тому, что сервер не может установить псевдотерминал. В результате это вызывает предупреждение и отсутствуют возможности управления заданиями, такие как переключение между процессами.
Решения
-
Убрать опцию
-T
: Если вам не критично отключение терминала, попробуйте выполнить команду без использования-T
. Это позволит SSH выделить псевдотерминал, что должно исключить предупреждение:ssh user@server << EOF cd cs4400/$dest gcc -o $efile $file ./$efile EOF
-
Установка переменной окружения
TERM
: Если вы хотите продолжать использовать-T
, вы можете вручную установить переменную окруженияTERM
. Например:TERM=vt100 ssh -T user@server << EOF cd cs4400/$dest gcc -o $efile $file ./$efile EOF
-
Замена оболочки: Если проблема возникает из-за особенностей
tcsh
, можно использовать другую оболочку, такую какbash
. Например, вы можете перезапустить сессию вbash
для выполнения ваших команд:ssh -T user@server "/bin/bash -ec 'cd cs4400/$dest ; gcc -o $efile $file ; ./$efile'"
-
Используйте
set +m
вtcsh
: Вы также можете попробовать отключить управление заданиями непосредственно вtcsh
:ssh -T user@server "set +m; cd cs4400/$dest; gcc -o $efile $file; ./$efile"
Резюме
Подавление предупреждения «Warning: no access to tty» можно достичь различными способами, такими как удаление опции -T
, установка переменной TERM
, использование другой оболочки или отключение управления заданиями в tcsh
. Выберите тот метод, который наилучшим образом подходит для вашей ситуации.
Если у вас есть дополнительные вопрос или проблемы с настройкой, не стесняйтесь обращаться за помощью.