Вызвать сценарий «ожидаем» в процессе C ++ - PullRequest
0 голосов
/ 11 августа 2011

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

Сценарий отлично работает на терминале UNIX.* Тем не менее, я пытался использовать этот скрипт в процессе C ++.Он был вызван системой () или даже функцией popen () без успеха.Возвращается эта ошибка: «ioctl (raw): ошибка ввода-вывода» Кто-то может иметь какие-либо подсказки?

Это мой сценарий:

 #!/bin/bash
 targetHost=$1
 password=$2
 sourceFile=$3

 destRep=$4       
 expect -c "        
        spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep
        expect -i $spawn_id { 
          "*password:*" { send -i $spawn_id $password\r\n; interact } 
          eof { exit }
        }
        exit
        "

1 Ответ

0 голосов
/ 11 августа 2011

Первое, что я бы попробовал, это отказаться от скрипта bash (в любом случае возникают проблемы с цитированием)

#! /usr/bin/env expect -f
foreach {targetHost password sourceFile destRep} $argv break
spawn /usr/bin/scp -q $targetHost:$sourceFile $destRep
expect -i $spawn_id { 
    "*password:*" { send -i $spawn_id $password\r; interact } 
    eof { exit }
}

Но реальная проблема заключается в том, как каналы stdio / pty наследуются ожидаемымпроцесс (я не уверен в правильной терминологии здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...