如何在运行程序时实时查看并获取控制台输出内容?
实时查看并提取程序控制台输出的方法
当然可以,你当前用run_res=($(/home/user/myapp))的写法会一次性捕获程序所有标准输出,必须等程序执行完毕才能处理内容。要实时处理输出,需要逐行读取程序的输出流,以下是几种可行方案:
逐行实时处理并存储
用while循环配合管道,每收到一行输出就立即处理,同时可将内容存入数组:run_res=() /home/user/myapp 2>&1 | while IFS= read -r line; do # 实时打印到控制台 echo "$line" # 将当前行添加到数组 run_res+=("$line") done其中
2>&1是把标准错误(stderr)重定向到标准输出(stdout),确保所有控制台输出都能被捕获;IFS= read -r line可以正确处理包含空格、制表符或特殊字符的行。同时实时显示并保存到文件/数组
用tee命令实现输出分支,既实时显示到控制台,又将内容保存到临时文件或直接存入数组:# 实时显示+保存到临时文件,之后可读取到数组 /home/user/myapp 2>&1 | tee /tmp/myapp_output.log run_res=($(cat /tmp/myapp_output.log))或者直接边显示边存入数组:
run_res=() /home/user/myapp 2>&1 | tee >(while IFS= read -r line; do run_res+=("$line"); done)这里的
>(...)是进程替换,让tee把输出同时送到控制台和后台循环进程,实现实时存储。
内容的提问来源于stack exchange,提问作者Serjaru
相关产品推荐
相关产品推荐

