【Linux】运行脚本后打屏同时保存到本地

命令:

shell 复制代码
sh run.sh 2>&1 | tee output.log
sh run.sh 2>&1 | tee output_$(date "+%Y%m%d%H%M").log

作用:运行脚本,并同时将输出(包括标准输出和错误输出)显示到终端,并保存到文件中。

2>&1:把标准错误重定向到标准输出。

管道符|:将前面的结果传递给tee命令。

tee:把输出同时显示到终端和写入文件中。


AI查询:

复制代码
命令 sh run.sh 2>&1 | tee output.log 的作用是运行 shell 脚本 run.sh,并同时将输出(包括标准输出和错误输出)显示到终端,并保存到 output.log 文件中。下面我会逐一解释每个部分的作用和逻辑:

----------------------------------------


1. SH RUN.SH

 · sh:调用系统默认的 shell 解释器(通常为 Bourne Shell)。
 · run.sh:要执行的 shell 脚本文件。
 · 整体作用:执行 run.sh 脚本。

----------------------------------------


2. 2>&1(文件描述符重定向)

 · 文件描述符(File Descriptors) 是 Unix/Linux 系统中对输入/输出流的抽象编号:
   · 0:标准输入(Standard Input)
   · 1:标准输出(Standard Output,通常是终端输出)
   · 2:标准错误(Standard Error,通常是错误信息输出)
 · 2>&1 的含义:
   · 将 文件描述符 2(标准错误) 重定向到 文件描述符 1(标准输出)。
   · 即:将错误信息与正常输出合并,一起输出到同一个位置。

----------------------------------------


3. | TEE OUTPUT.LOG

 · |:管道符,将左边命令的输出传递给右边的命令。
 · tee:这是一个工具,用于将输入同时显示到终端和写入文件。
   · output.log:要保存输出的文件。
 · 整体作用:
   · 将 sh run.sh 的输出(包括错误信息)通过 tee 工具同时显示到终端和写入 output.log 文件。

----------------------------------------


4. 完整逻辑链条

结合以上部分,命令的执行流程如下:

 1. 执行 run.sh 脚本,生成 标准输出(stdout) 和 标准错误(stderr)。
 2. 将 stderr(描述符 2) 重定向到与 stdout(描述符 1) 相同的位置(2>&1)。
 3. 将合并后的所有输出通过管道符 | 传递给 tee output.log。
 4. tee 将这些输出 实时显示在终端,并 同步写入 output.log 文件。

----------------------------------------


5. 示例场景

假设 run.sh 的内容如下:

#!/bin/sh
echo "Normal output"
echo "Error message" >&2  # 通过 >&2 将输出发送到标准错误


执行 sh run.sh 2>&1 | tee output.log 会:

 · 在终端显示:
   Normal output
   Error message
   
 · 同时,output.log 文件内容将是:
   Normal output
   Error message
   

----------------------------------------


6. 与类似命令的区别

 · 如果不加 2>&1,只执行 sh run.sh | tee output.log:
   · 标准错误(stderr) 会被忽略,只会处理 标准输出(stdout)。
 · 如果替换为 sh run.sh &> output.log(某些 Shell 支持的简写):
   · 输出(包括 stderr)会被写入文件,但不会显示到终端。

----------------------------------------


7. 适用场景

这个命令常用于:

 · 调试脚本:需要实时观察输出,同时保留日志供后续分析。
 · 自动化部署/监控:确保日志记录完整,同时用户能实时看到关键信息。
 · 记录错误信息:确保错误信息与正常输出一起被捕获,便于问题排查。

----------------------------------------


8. 扩展

你可以根据需求调整命令:

 · 仅保存标准输出:sh run.sh | tee output.log
 · 仅保存错误信息:sh run.sh 2> error.log
 · 同时保存到不同文件:
   sh run.sh > output.log 2> error.log
   
 · 将输出和错误合并到同一文件,但不实时显示:
   sh run.sh 2>&1 > output.log
相关推荐
wanhengidc6 分钟前
服务器机柜与网络机柜各自的优势
服务器·网络·智能路由器
网易独家音乐人Mike Zhou31 分钟前
【Linux应用】开发板USB共享网络,网线或USB以太网共享网络(局域网连接PC和开发板,实现PC给开发板共享网络,USB通过NDIS驱动共享)
linux·网络·单片机·mcu·物联网·嵌入式·iot
basketball6161 小时前
Linux C 管道文件操作
linux·运维·c语言
颖川初尘1 小时前
端口到底是个什么鬼?回答我!
服务器·网络·tcp/ip·node.js
浩浩测试一下2 小时前
Windows 与 Linux 内核安全及 Metasploit/LinEnum 在渗透测试中的综合应用
linux·运维·windows·web安全·网络安全·系统安全·安全架构
stark张宇2 小时前
Linux 文件创建、删除、移动、复制基础知识整理
linux·服务器·centos
将心ONE2 小时前
使用 lstrip() 和 rstrip() 方法
运维·服务器
Jiangnan_Cai3 小时前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
Two_brushes.4 小时前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW0208144 小时前
【Linux】系统引导修复
linux·运维·服务器