我有一个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
文件不存在
基本上是测试,但它显示“文件不存在”
答案 0 :(得分:0)
这个问题已经很久了,但我希望有人能从这个答案中获得帮助。
- &GT;您应该使用#!/usr/bin/expect
或#!/bin/expect
正确使用expect
,expect<<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
内写,就像我在上面的示例中所示。