如何在终端中10秒后向交互式命令注入初始指令?
解决方案
方法1:纯Bash管道实现(无需额外工具)
直接在发送初始命令前添加sleep 10,后续通过cat保持标准输入的交互性,命令如下:
(sleep 10 && echo "initial cmd" && cat) | interactive_cmd
原理说明
sleep 10:等待10秒后再执行后续命令echo "initial cmd":向交互式进程注入初始指令cat:持续读取你的终端输入并传递给进程,确保进程不会因为输入结束而退出,保持交互状态
方法2:Expect脚本(适用于依赖TTY的交互式程序)
如果目标程序(比如ssh、vim这类需要终端环境的工具)无法通过管道正常工作,使用Expect脚本更可靠:
- 创建一个
delay_inject.exp脚本:
#!/usr/bin/expect # 启动目标交互式进程 spawn interactive_cmd # 等待10秒 sleep 10 # 发送初始指令(\r模拟回车) send "initial cmd\r" # 切换到用户交互模式,保持进程活跃 interact
- 赋予脚本执行权限并运行:
chmod +x delay_inject.exp ./delay_inject.exp
原理说明
spawn:启动目标进程并建立控制会话sleep 10:延迟10秒发送指令send:向进程注入初始命令interact:将控制权交还给用户,允许你继续和进程交互
内容的提问来源于stack exchange,提问作者questions
相关产品推荐
相关产品推荐

