Удалить возврат каретки (\r) из переменной в сценарии ожидания

virt -clon --auto -clon no parece funcionar bien con LVM. Esperaba que creara una instantánea y la usara, pero en su lugar copia todos los datos.

Es mejor hacer la ruta dumpxml/define; y recuerde montar el sistema de archivos raíz del clon y cambiar las direcciones IP y el nombre de host de manera adecuada antes de iniciar el original y el clon.

2
13.06.2019, 02:23
1 ответ

После того, как вы отправили свой пароль и «нажали Enter», первое, что делает ssh, — это выводит новую строку. Вы не учитываете это в тексте, который вы извлекаете из ожидаемого _выходного буфера. Также обратите внимание, что Ожидание использует CRNL для представления новой строки, что, как я понимаю, должно соответствовать некоторым стандартам сетевого протокола.

Этот интерактивный сеанс ожидания в значительной степени воспроизводит проблему. В конце я отправляю содержимое переменной внешней команде od, чтобы точно посмотреть, что в ней:

expect1.1> spawn sh -c {read password; ls -t | head -1}
spawn sh -c read password; ls -t | head -1
42945
expect1.2> send "\r"
expect1.3> expect "*.zip"

somefile.zip
expect1.4> set sourceFile $expect_out(0,string)

somefile.zip
expect1.5> exec od -c << $sourceFile
0000000  \r  \n   s   o   m   e   f   i   l   e  .   z   i   p
0000016

Что вам нужно сделать, так это захватить текст, оканчивающийся на «.zip», который появляется после последней новой строки . Довольно просто сделать с регулярным выражением:

expect1.1> spawn sh -c {read password; ls -t | head -1}
spawn sh -c read password; ls -t | head -1
42992
expect1.2> send "\r"
expect1.3> expect -re {.*\r\n(.*\.zip)}

somefile.zip
expect1.4> set sourceFile $expect_out(1,string)
somefile.zip
expect1.5> exec od -c << $sourceFile
0000000   s   o   m   e   f   i   l   e  .   z   i   p
0000014

Обратите внимание на использование (1,string), чтобы взять текст, захваченный первым набором скобок.

3
27.01.2020, 22:02

Теги

Похожие вопросы