You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:07