在我的下面的脚本中,我希望从派生得到的输出是
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我尝试了几种不同的方法,转义引号等,但没有乐趣。下面的代码
#!/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发布于 2020-03-06 18:16:05
你可能曲解了你所看到的。Expect不会在空格上拆分变量中的字符串。下面这个简单的shell脚本只打印用">...<“括起来的每个参数。
cat >mytest <<\!
#!/bin/bash
for arg;do echo -n " >$arg<"; done; echo
!
chmod +x mytest我们从expect运行它,使用一个保存空格的变量:
expect -f - <<\!
set myvar "a b"
spawn ./mytest v=$myvar
expect eof
!这是输出:
spawn ./mytest v=a b
>v=a b<尽管expect输出的spawn命令的回显似乎表明mytest有两个参数,即v=a和b,但实际上shell脚本只有一个参数v=a b。
这表明您的脚本的第一部分可能是正确的,您应该在其他地方寻找问题。(注意,这里有一个ovirt-aaa-jdbc-tool命令here的示例,它与您正在做的事情相匹配。它有"",因为它是从shell运行的,这将删除这些引号,而不是在空格上拆分。)
发布于 2020-03-06 06:25:58
您还可以在双引号中转义双引号:
set valid_to "\"2025-09-15 10:30:00Z\""发布于 2020-03-06 03:01:10
用单引号将日期括起来应该是可行的:
set valid_to "'2025-09-15 10:30:00Z'"https://stackoverflow.com/questions/60551034
复制相似问题