Теперь переоткрываются устройства STDIN, STDOUT и STDERR в новый объект терминального устройства с использованием функции fdopen() и закрывается уже ненужная копия дескриптора файла. Отменяется буферизация в устройстве STDOUT и вызывается функция ехес() для выполнения требуемой команды с параметрами. После выполнения команды ее стандартный ввод и вывод подключаются к новому терминальному устройству, которое, в свою очередь, подключается к псевдотерминалу, управляемому родительским процессом.
Итоговая программа выполняет следующее: загрузка модулей, setsid() из модуля POSIX. Обработка параметров командной строки и вызов подпрограммы. Единственное изменение состоит в том, что определена новая константа prompt, которая содержит образец для сопоставления с приглашением к вводу команд данной командной оболочки. Все очень просто, как например, купить photoshop в онлайн магазине.
Запуск подпроцесса ssh. Вызывается подпрограмма для запуска программы ssh с использованием указанного имени пользователя и хоста. Если подпрограмма do_cmd () выполняется успешно, она возвращает дескриптор файла, подключенный к псевдотерминалу, который управляет подпроцессом ssh.
Создание и инициализация объекта Net::Telnet. В процедуре создается новый объект Net::Telnet, но теперь мы не разрешаем объекту Net::Telnet самому открыть соединение с удаленным хостом, а передаем ему дескриптор файла ssh в параметре Fhopern. После создания объекта Net::Telnet выполняется его настройка путем перевода в двоичный режим с помощью метода binmode и установка журнала ввода для отладки и установка режима обработки ошибок “return”. Применение двоичного режима — это небольшая, но важная поправка к первоначальному сценарию. Поскольку в протоколе SSH для обозначения конца строки используется один символ lf, а не пара символов crlf, предусмотренная по умолчанию, преобразование символов crlf модуля Net::Telne является неприемлемым.