экранирование дефиса и кавычек в сценарии ожидания

Здравствуйте, я использую ожидать, чтобы автоматизировать задачу входа в систему. но сценарий не работает, если пароль начинается с дефиса. Как мне избежать этого?

У меня много проблем с правильным экранированием '"или других символов. Есть ли способ, которым я могу закодировать все мои символы и отправить, ожидая, что закодированная строка будет декодирована перед отправкой

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

#!/usr/bin/expect -f
spawn ssh -o "PubkeyAuthentication no" -l user 10.10.10.10
expect "password: "
send "-cpass\'ok\r"
expect "$ "

person Ram    schedule 22.02.2017    source источник
comment
Вы пытаетесь избежать одиночной кавычки или пробела здесь?   -  person Inian    schedule 22.02.2017


Ответы (2)


На странице руководства:

Флаг - заставляет следующий аргумент интерпретироваться как строка, а не как флаг. Любой строке может предшествовать знак «-» независимо от того, действительно ли она похожа на флаг. Это обеспечивает надежный механизм для указания переменных строк, чтобы их не сбивали с толку те, которые случайно выглядят как флаги. (Все строки, начинающиеся с «-», зарезервированы для будущих опций.)

Это означает, что вы должны написать свой send примерно так:

send -- "-cpass\'ok\r"

Примечание: у вас возникнут проблемы при попытке передать любую строку, начинающуюся с дефиса; это не сработает: send "-cpass", если в вашей строке есть дефис, вам нужно использовать флаг --.

person gregory    schedule 22.02.2017

Вы можете попробовать сохранить свой пароль в переменной:

password=-cpass\'ok\r
send "$password"

Вы просто пишете \ перед каждым _3 _, _ 4_ или пробелами.

person daniel.971    schedule 22.02.2017
comment
Tcl / Expect не поддерживает синтаксис var=value. - person pynexj; 23.02.2017