shell中调用expect 我编写了一个普通用户切换到root的脚本。

#!/bin/bashexpect<<!spawnsu-expect":"send"redhat\r"expecteof!能够实现从普通用户切换到root,但问题是切换过... #!/bin/bash
expect <<!
spawn su -
expect ":"
send "redhat\r"
expect eof
!
能够实现从普通用户切换到root,但问题是切换过去后系统5秒钟后自动又从root切换到原先的普通用户了。这是为什么,怎么解决呢???
展开
 我来答
不知详解
推荐于2018-03-13 · 知道合伙人软件行家
不知详解
知道合伙人软件行家
采纳数:609 获赞数:2252
自学计算机。

向TA提问 私信TA
展开全部
在bash 中直接执行expect 应该使用 -c 选项,而不是使用重定向。
# expect -c '
spawn su -
expect ":" {
send "passwdXXXX\n"
}
interact
'
你这种想法也算不上托裤子放屁,既然expect 提供了 -c 选项,就说名直接在bash 中调用expect 的大有人在。
luneng8183
2012-12-03 · TA获得超过902个赞
知道小有建树答主
回答量:606
采纳率:100%
帮助的人:514万
展开全部
#!/bin/bash
expect <<!
spawn su -
expect ":"
send "redhat\r"
expect eof
interact
wait
!
追问
还是不行,还是那样有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kwydwuf
推荐于2016-08-05 · TA获得超过7411个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:2015万
展开全部
不要写成 bash 脚本,直接写 expect 脚本就行了。

#!/usr/bin/env expect

spawn su -

expect ":" {
send "redhat\r"
}

interact
追问
哦,这种可以我试过的,我是想在#!/bin/bash中调用expert来实现。但是始终有问题,不过还是很谢谢你了。
追答
首先,你这种想法就是脱裤子放屁。

其次,如果一定要在bash脚本中调用 expect, 那也不能用 here document,在 here document 最后一行bash会关闭expect的输入,导致 expect 需要读取输入时 (interact 语句),发现输入文件已经结束,就会退出。可以把下面的内容存入文件,比如 a.exp 中

spawn su -
expect ":" {
send "redhat\r"
}
interact

然后在 bash 脚本中
#!/bin/bash
expect a.exp
这样就能在 bash 中调用 expect 并保持 su - 的session不退出。但是,这显然多此一举。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式