预期:如何访问变量和命令

时间:2018-11-20 13:17:47

标签: bash expect spawn

我正在尝试进行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}"

1 个答案:

答案 0 :(得分:0)

从期望的角度来看:

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

所以你得到

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

从壳体侧面

你想要

send "printf '%s\n' * | sort -k1 -n\r"
# or
send "ls -1v\r"