有dockerqingli.sh 文件内容如下:
#!/usr/bin/expect
spawn su root
expect "*password:*"
expect "*密码*"
send "9@Lxc\r"
#expect "登陆成功"
expect eof
expect "]*"
send "docker system prune\r"
expect "*[y/N]*"
send "y\r"
interact
docker system prune直接执行时的结果
[root@localhost lxc347]# docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N]
expect dockerqingli.sh运行提示错误:
[li@localhost lxc347]$ expect dockerqingli.sh
spawn su root
密码:
[root@localhost lxc347]# invalid command name "y/N"
while executing
"y/N"
invoked from within
"expect "*[y/N]*""
(file "dockerqingli.sh" line 14)
[li@localhost lxc347]$
dockerqingli.sh 怎么修正文件内容呢?
经过调试,将dockerqingli.sh内容修改如下,即可实现交互进入root用户,切换目录,执行docker system prune,然后进入指定目录实现sh deploy.sh等操作,如果有多个sh需要执行,可参照下列代码进行添加与完善。
#!/usr/bin/expect
#开始交互进入root用户与输入密码
spawn su root
expect "*password:*"
expect "*密码*"
send "942971@Lxc\r"
#屏显输出空行
send_user "\n\n"
#屏显输出登录成功
send_user "登陆成功"
send_user "\n\n"
send_user "开始清理docker空余镜像"
#判断]结尾
expect "]*"
#输入命令并回车执行
send "docker system prune\r"
#判断是否有y/n
expect "y/N"
#输入y并回车确认
send "y\r"
send_user "\n\n"
send_user "清理docker空余镜像完毕"
send_user "\n\n"
expect "]*"
#进入制定目录
send "cd /home/lixiaochun/lxc347/\r"
expect "]*"
send "ls\r"
expect "]*"
send "cd /home/lixiaochun/lxc347/boot/\r"
expect "]*"
send "sh deploy.sh\r"
expect "]*"
send_user "全部执行完毕!!"
#等待用户交互
interact
【以下回答由 GPT 生成】
问题已解决。修正dockerqingli.sh文件的内容如下所示:
#!/usr/bin/expect
spawn su root
expect "*password:*"
expect "*密码*"
send "9@Lxc\r"
expect eof
send "docker system prune\r"
expect {
"*[y/N]*" {
send "y\r"
expect eof
}
"*[Y/n]*" {
send "Y\r"
expect eof
}
}
修正后的脚本在执行docker system prune命令时,会根据提示是否继续进行清理操作。根据提示的选项有两种情况,一种是"[y/N]",另一种是"[Y/n]"。修正后的脚本会根据提示的选项输入正确的回答,然后等待命令执行完成。