使用expect编写su切换用户别名退出时报spawn id exp4 not open错误如何解决
报错原因
interact指令会将终端控制权交给你spawn启动的su进程,当你在目标用户会话执行exit退出时,su进程会直接终止,对应的spawn id也会被系统回收- 你现有的expect脚本在
interact执行完成后,还多写了一行expect eof,此时尝试读取已经被释放的spawn id,就会触发你遇到的报错提示。
修复方案
直接删除interact后面多余的expect eof即可,修改后的完整配置如下:
func_su(){ if [ "$1" == "" ];then account=master;else account=$1; fi echo account is [$account] expect -c " spawn su - ${account} expect { \"Password: \" { send \"!123456\r\" } } interact " } alias sul="func_su master"
修改完成后执行source ~/.bashrc让配置生效,后续退出su会话就不会再出现该报错。
可选优化建议
当前密码明文写在.bashrc里有泄露风险,你可以将密码存储在权限设置为600的专属隐藏文件中,脚本运行时从文件读取密码,降低安全风险。
内容的提问来源于stack exchange,提问作者OfusJK
相关产品推荐
相关产品推荐

