6

Я тяну волосы за это. Я просмотрел все результаты Google для /dev /tty: нет такого устройства или адреса, ни одно из них не относится к тому, что я делаю / ни одно из решений не является успешным.

У меня есть сценарий, который ssh'es на другую машину (с использованием открытых ключей) и запускается сам (с другими параметрами - он не зацикливается). Вызовите этот rpmInstallScript.bash

В одном месте скрипта он запускает rpm -ivh для установки некоторых RPM-пакетов. Во время установки одного из этих пакетов файл помещается в /var /tmp с именем rpm-tmp. [6 случайных символов]

Этот файл является скриптом, и я думаю, что он выполняется в какой-то момент во время установки rpm.

В сценарии есть несколько случаев

echo [something] > /dev/tty 

или же

echo [something] | tee [something] > /dev/tty.

Все эти случаи не работают с /dev /tty: нет такого устройства или адреса. Если я захожу в машину вручную и самостоятельно выполняю rpm-пакеты, запускаю скрипт rpm-tmp или запускаю rpmInstallscript.bash, он работает нормально.

Я подключаюсь к удаленной машине с помощью ssh -t, поэтому должен быть tty, правильно?

Я не понимаю, почему это не работает, особенно потому, что делать это вручную, даже без опции -t, работает нормально. Единственное, о чем я могу думать, это то, что это не интерактивная сессия - но /dev /tty все еще должен существовать, верно?

Изменить - ошибка возникает из-за:

ssh -t root@[machine] -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <<DONE
./rpmInstallScript.bash

где rpmInstallScript.bash запускает rpm -ivh, результирующий скрипт, помещенный в /var /tmp, использует> /dev /tty - это то, что не работает

Снова отредактируйте: использование -tt дает:

tcgetattr: Inappropriate ioctl for device

Только при запуске из скрипта - запуск ssh -tt вручную, а затем проверка эха>/dev/tty работает нормально.

Я могу только предположить, что это неспособность принудительно создать tty.

Есть ли другой способ «сгенерировать» tty? Могу ли я просто подделать его, создав файл с именем /dev /tty?

1 ответ1

2

Попробуйте -tt чтобы увидеть, если это работает.

Со страницы руководства ssh,

Multiple -t options force tty allocation, even if ssh has no local tty.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .