Недопустимые символы в пароле в скрипте Expect / Shell - PullRequest
0 голосов
/ 11 декабря 2018

У нас есть пароль bt67nJuse3?{]=_0!\`fr,./&##@ (кроме кавычек).Этот пароль содержит такие символы, как {, `, /, ., !, которые, возможно, необходимо экранировать.Многие комбинации были опробованы безрезультатно, и, потратив много времени на решение этой проблемы, следующий фрагмент не работает.

Уже пробовал:

  • 'bt67nJuse3?{]=_0!`fr,./&##@'"\r"
  • "bt67nJuse3?{]=_0!`fr,./&##@\r"
  • "bt67nJuse3?{]=_0"'!'"`fr,./&##@\r"
  • 'bt67nJuse3?{]=_0!`fr,./&##@\r'
  • "bt67nJuse3?{]=_0!\`fr,./&##@\r"
  • "bt67nJuse3?{]=_0!\`fr,./&##@\r"

Начало кода:

#!/bin/bash
/usr/bin/expect << EOF
spawn scp user111@servername.domain.com:/home/path1/test1.log /home/path2/
expect {
    " password: " { send 'bt67nJuse3?{]=_0!`fr,./&##@'"\r";  exp_continue }
    eof
}
... some code ...
EOF

Как я могу получить этот пароль в expect?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Создание этого файла в отдельном файле и использование команды ожидаемого сработало:

set password "bt67nJuse3?{]=_0!\`fr,./&##@";
spawn scp user111@servername.domain.com:/home/path1/test1.log /home/path2/
expect {
    " password: " { send "$password\r";  exp_continue }
    eof
}

и с использованием «ожидаемого имени файла» сработало !!!WOW OMG

0 голосов
/ 11 декабря 2018

Первая строка

/usr/bin/expect << EOF

должна быть изменена на

/usr/bin/expect << 'EOF'

Основная проблема связана с тем, как процесс bash здесь-doc

      <<[-]word
                  here-document
          delimiter

  ...  If any characters in word are quoted, the delimiter is
  the result of quote removal on word, and the lines in the here-document are not expanded.  If word is unquoted, all lines of the here-document are subjected to parameter  expansion,
   command substitution, and arithmetic expansion, the character sequence \<newline> is ignored, and \ must be used to quote the characters \, $, and `.
...