Ожидайте: как получить цитаты для отправки - PullRequest
0 голосов
/ 05 марта 2020

В моем следующем скрипте я хочу, чтобы вывод spawn был

ovirt-aaa-jdbc-tool user password-reset user--password-valid-to="2025-09-15 10:30:00Z"

, но он игнорирует кавычки и дает мне

ovirt-aaa-jdbc-tool user password-reset user--password-valid-to=2025-09-15 10:30:00Z

Я пробовал несколько разных способов, избегая цитат и т. д. c, но не радость. Код ниже

#!/usr/bin/expect

set password [lindex $argv 0]
set username [lindex $argv 1]
set valid_to "2025-09-15 10:30:00Z"
set timeout -1


spawn ovirt-aaa-jdbc-tool user password-reset $username --password-valid-to=$valid_to
expect -re {(?n)^Password.*}
send "$password\n"
expect -re {(?n)^Reenter password.*}
send "$password\n"
expect -re {(?n)^user updated successfully.*}
send "history > his && echo hi\n"
expect -re {(?n)^#*}
send "whoami\n"
expect -re {(?n)^#*}
expect eof

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Вы, вероятно, неправильно истолковываете то, что видите. Expect не разбивает строки на переменные в пробелах. Следующий простой скрипт оболочки просто печатает каждый аргумент, окруженный "> ... <". </p>

cat >mytest <<\!
#!/bin/bash
for arg;do echo -n " >$arg<"; done; echo
!
chmod +x mytest

Мы запускаем его из ожидаемого, используя переменную, которая содержит пробелы:

expect -f - <<\!
set myvar "a   b"
spawn ./mytest v=$myvar
expect eof
!

Это вывод:

spawn ./mytest v=a   b
 >v=a   b<

Хотя эхо-сигнал Команда spawn, напечатанная ожидаемо, предполагает, что для mytest было 2 аргумента, а именно v=a и b, фактически скрипт оболочки видел только 1 аргумент v=a b.

Это показывает, что первая часть вашего сценария, вероятно, в порядке, и вы должны искать проблему в другом месте. (Обратите внимание, что есть пример команды ovirt-aaa-jdb c -tool здесь , которая соответствует тому, что вы делаете. Она имеет "", потому что она запускается из оболочки, которая будет удалите эти кавычки, а не разбивайте на пробелы.)

0 голосов
/ 06 марта 2020

Вы также можете избежать двойных кавычек внутри двойных кавычек:

set valid_to "\"2025-09-15 10:30:00Z\""
0 голосов
/ 05 марта 2020

Заключение даты в одинарные кавычки должно работать:

set valid_to "'2025-09-15 10:30:00Z'"
...