Expect:如何访问变量和命令



我正在尝试执行for循环,以便从预期脚本内的ls输出中读取每个文件。

/usr/bin/expect << 'EOF'
set timeout -1
spawn ssh root@server
expect { 
"*assword: " 
}
send "_t00rhs!r"
expect { 
"*]# " 
}
send 'for item in "$(ls)" do sort -k1 -n ${item}; done r'
expect { 
"*]# " 
}

输出显示它还没有得到item的值。

]0;root@atddpvm13:~[?1034h[root@atddpvm13 ~]# can't read "item": no such 
variable
while executing
"send 'for item in "$(ls)" do sort -k1 -n ${item}"

从预期方面来看:

  • 单引号在expect中没有特殊含义
  • 使用大括号进行非内插引用
  • 但是r序列不会用大括号来解释

所以你得到

send {for item in $(ls); do sort -k1 -n "$item"; done}
send "r"

来自壳程

  • 不解析ls
  • 不要使用for迭代行

您想要

send "printf '%sn' * | sort -k1 -nr"
# or
send "ls -1vr"

最新更新