如何在shell脚本中使用expect

时间:2012-11-24 21:11:56

标签: shell expect

  

我有一个bash + expect脚本,它必须连接普通用户,我想要   读取特定文件并存储到要使用的变量中   在root用户中的那个特定文件之后。我怎样才能获得价值?   我的剧本是:

#!/bin/bash
set prompt ">>> "
set command ls /root/test1

expect << EOF
spawn su root
expect "password:"
send "rootroot\r"
expect "$prompt\r"
send "$command\r"
expect "$prompt\r"
expect -re "(.*)\r\n$prompt\r\n"
EOF

echo "$command"

 if [ ! -f "$command" ]; then

                echo "file is not exist"
else
                echo "file is exist"
            fi
  

每当我执行我的shell脚本时,它会显示以下输出:

     

ls:/ root /:Permission denied

     

文件不存在

     

基本上是测试,但它显示“文件不存在”

1 个答案:

答案 0 :(得分:0)

这个问题已经很久了,但我希望有人能从这个答案中获得帮助。

- &GT;您应该使用#!/usr/bin/expect#!/bin/expect正确使用expectexpect<<EOF可能会有效,但这不是传统的编写脚本的方法。

- &GT;您的脚本应以EOF语句结尾。实施例

#!/usr/bin/expect << EOF
<some stuff you want to do>
EOF

- &GT; spawn的一些基本内容。无论你在spawn中写什么都会执行,但它不会对整个脚本产生影响。它不像环境变量。

简而言之, spawn将启动新流程,而您的命令不会在生成过程中。 实施例

#!/usr/bin/expect
spawn bash -c "su root '<your-cmd-as-root>'"
<some-expect-send-stuff-etc>

现在在您的脚本中,$command应该在spawn内写,就像我在上面的示例中所示。