我这哪里错了?没错啊就是不过啊

sh/bash/dash/ksh/zsh等Shell脚本
回复
piaocn
帖子: 31
注册时间: 2009-05-22 20:31
送出感谢: 0
接收感谢: 0

我这哪里错了?没错啊就是不过啊

#1

帖子 piaocn » 2011-02-23 21:00

写了个脚本:

代码: 全选

#!/usr/bin/expect
spawn sudo nautilus
expect "[sudo] password for patrick:"
send "123"
老是提示 :

代码: 全选

patrick@patrick-System-Product-Name:~$ ./login.sh 
spawn sudo nautilus
invalid command name "sudo"
    while executing
"sudo"
    invoked from within
"expect "[sudo] password for patrick:""
    (file "./login.sh" line 3)
我确认我sudo没拼错啊。。。。。。。。。。。
tycable
帖子: 66
注册时间: 2011-01-01 8:14
送出感谢: 0
接收感谢: 0

Re: 我这哪里错了?没错啊就是不过啊

#2

帖子 tycable » 2011-02-24 18:39

expect { ... }
花括号

看看 Manual 吧。
Blog <http://ffb-all.com/>
Linux User #529415 with Linux Counter <http://counter.li.org/>
PGP keyID F73D6274 hkp://keyserver.ubuntu.com
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40
送出感谢: 0
接收感谢: 0
联系:

Re: 我这哪里错了?没错啊就是不过啊

#3

帖子 chengmoYS » 2011-02-25 11:03

#!/usr/bin/expect
spawn sudo nautilus
expect "[sudo] password for patrick:"
send "123"


你这个脚本没有写完吧。
spawn开启一个sudo进程执行nautilus,expect等待该进程的返回,也就是要求你输入root密码,然后你的123是root密码吗,另外使用send传递参数给进程时,最好加上\r。

我用的不是ubuntu,无法帮你测试下。不过你可以试试看


#! /usr/bin/expect -f

spawn sudo nautilus

expect "[sudo] password for patrick:" ;# 这里应该是提示你输入root的密码吧

send "123\r" ;# 这里就是root的密码,另外加上[Enter]

interact ;# 这里是将脚本流程切换到用户

# epect eof 或者使用这个,来期待本次脚本执行完成,没有其他的操作了
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: 我这哪里错了?没错啊就是不过啊

#4

帖子 aerofox » 2011-02-27 11:02

用 expect 来给 sudo 输密码,那是给自己找麻烦,直接在 /etc/sudoers 里配置不用密码就是了。
MaskRay
帖子: 61
注册时间: 2010-04-29 22:00
系统: Gentoo Linux ~amd64
送出感谢: 0
接收感谢: 6 次
联系:

Re: 我这哪里错了?没错啊就是不过啊

#5

帖子 MaskRay » 2011-05-13 12:02

expect "[sudo] password for patrick:"

这行的问题,tcl 会尝试执行 sudo 这个命令的。前面加个 \ 转义

expect "\[sudo] password for patrick:"
回复

回到 “Shell脚本”