Использование процедуры порождения SSH не работает должным образом с ожидаемым - PullRequest
1 голос
/ 13 марта 2012

У меня есть сценарий ожидания, который, когда использует процедуру для запуска SSH, и, в дальнейшем, использование ожидаемого, не работает, когда непосредственно используется ssh spawn, функция ожидаемого, похоже, работает нормально.Любая идея, что здесь может быть не так ??

Я использую тот же фрагмент кода в другом случае и отлично работает.

proc sshLogin {serverName userName password} {
  global logfd
  set timeout 10
  logMessage "Connecting to  server = $serverName, please wait..."
  log_user 0
  spawn -noecho ssh -X "$userName\@$serverName"
  expect { 
    "password:" {
      send "$password\r"
      expect {
        "]#" {
          log_user 1
          logMessage "Logged in to Server = $serverName"
          return 1
        }
        "Permission denied" {
          log_user 1
          logMessage "Incorrect password!"
        }
      }
    }
    timeout {
      log_user 1
      logMessage "Connection to $serverName timed out"
    }
    eof {
      log_user 1
      logMessage "Connection to $serverName failed!"
    }
  }
  return 0
}

1 Ответ

3 голосов
/ 13 марта 2012

Вы также должны объявить, что spawn_id является глобальной переменной в вашей процедуре, добавив:

global spawn_id

или изменив global logfd на:

global logfd spawn_id

Thisпотому что текущее значение переменной spawn_id используется для определения того, что контролируется (жизненно важно, если вы хотите, чтобы ожидали управления двумя подпроцессами).Expect пытается сделать некоторые «умные» вещи для обработки случая, когда вы помещаете вызовы expect / send в процедуру, не объявляя вещи, но это не очень надежный метод, и он не работает с spawnСамо по себе: вы должны сделать это явным (в любом случае, это хорошая идея при работе с процедурами).

...