4

我有一个 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/: 权限被拒绝

文件不存在

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

4

1 回答 1

0

这个问题很老了,但我希望有人能从这个答案中得到帮助。

--> 你应该使用#!/usr/bin/expect或正确#!/bin/expect使用expectexpect<<EOF可能会工作,但那不是写脚本的常规方式。

--> 你的脚本应该以EOFstatement 结尾。前任。

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

--> 关于spawn. 无论你写什么spawn都会执行,但它不会对整个脚本产生影响。它不像环境变量。

简而言之,spawn将启动新进程并且您的命令不在生成进程下。 前任。

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

现在在你的脚本中,$command应该spawn像我在上面的例子中显示的那样写在里面。

于 2017-03-19T11:41:40.563 回答