Ubuntu下用Expect实现需交互进程后台自动化失败问题求助
解决Expect脚本后台运行报错“liner: function not supported in this terminal”
问题根源
interact命令是报错核心:这个命令的作用是把终端控制权交还给用户,让你能直接和启动的进程交互。但后台运行时没有交互式终端可用,自然会触发终端功能不支持的错误。- 多余的
expect_background:这个命令用于处理后台进程的expect逻辑,你的场景完全不需要,留着反而会引发冲突。
修改后的脚本
#!/usr/bin/expect -f # 启动目标进程,忽略HUP信号防止终端关闭时进程退出 spawn -ignore HUP /home/startclef.cmd # 匹配提示并发送"ok" expect "ok" send "ok\r" # 等待密码提示并发送密码 expect "Please enter the password to decrypt the master seed" send "pass_123\r" # 等待进程执行结束(如果需要进程持续运行,可换成`while {1} {sleep 1}`这类逻辑) expect eof
后台运行的正确姿势
- 直接后台启动:
./script.expect & - 如果希望终端关闭后进程还能继续跑,用
nohup配合输出重定向:
这里nohup ./script.expect > /dev/null 2>&1 &>/dev/null 2>&1是把所有输出都丢弃,避免生成多余的nohup.out文件。
内容的提问来源于stack exchange,提问作者Abdulhamid
相关产品推荐
相关产品推荐

