如何将shell脚本变量传递给expect脚本?

时间:2014-02-21 07:40:37

标签: shell expect

我想将$ SPACE变量传递给expect脚本并获取输出并再次传入shell脚本。

#!/bin/bash -x

    SPACE=$(df -h | awk '{ print $5 }' | grep -v Use |sort -n |tail -1 | cut -d % -f1)
    #set user "root"
    #set ip "192\.168\.53\.197"
    #echo $SPACE

    expect<<EOF

    spawn ssh "root\@192\.168\.53\.197"

    expect "Password:"

    send "Karvy123$\r";

    expect "prompt"

    send "$SPACE\r";

    expect "prompt"

    EOF

1 个答案:

答案 0 :(得分:7)

哦,我明白了。您希望$ SPACE保持COMMAND,而不是VALUE。此构造将执行命令并将输出保存在变量x=$(cmd arg arg)中。因此,您将找到本地主机上使用的空间并将该值发送到远程主机。

你需要这样的东西:

#!/bin/bash
export cmd="df -h | awk '{ print \$5 }' | grep -v Use |sort -n |tail -1 | cut -d % -f1"
remote_usage=$(
    expect <<'EOF'
    log_user 0
    spawn -noecho ssh "root@192.168.53.197"
    expect "Password:"
    send "*****\r"
    expect "prompt"
    send "$env(cmd)\r"
    expect -re {(?n)^(\d+)$.*prompt}
    send_user "$expect_out(1,string)\n"
    send "exit\r"
    expect eof
EOF
)
echo "disk usage on remote host: $remote_usage"

但是,您不必执行任何操作。设置SSH密钥(使用ssh-keygenssh-copy-id)并执行

remote_usage=$( ssh root@192.168.53.197 sh -c "df -h | awk '{ print \$5 }' | grep -v Use |sort -n |tail -1 | cut -d % -f1" )