В вашей программе есть 2 ошибки. Последняя строка недопустима:
ConnectToClient.expect(command, prompt)
недействительна, так как expect принимает в качестве второго аргумента номер тайм-аута, а не строку.
Другая проблема заключается в том, что в вызове:
ConnectToClient.expect(prompt)
приглашение
должно быть регулярным выражением (регулярное выражение). Вы предоставляете строку, которая будет скомпилирована в регулярное выражение. Однако в регулярном выражении символ [
является особенным, поэтому вам нужно его экранировать. Либо установите
prompt = r'\[root@user ~\]#'
, либо вместо использования .expect ()
используйте .expect_exact ()
, который хочет строк, а не регулярных выражений.
В качестве переносимого решения POSIX иногда может оказаться целесообразным просто добавить исходный "$@"
к аргументам функции и изменить параметры внутри функции:
#!/bin/sh
foo () {
printf '%s-' "$@"
printf '\n'
# Save function parameters to custom variables
x="$1"
y="$2"
z="$3"
shift 3
# At this point, "$@" regained its original value
printf '%s-' "$x" "$y" "$z" "$@"
printf '\n'
}
foo 1 2 3 "$@"
Пример вызова:
$ sh example.sh 4 5 6
1-2-3-4-5-6-
1-2-3-4-5-6-