linux Shell 脚本 输出日志文件 log /dev/null

linux Shell 脚本 输出日志文件 log

shell 错误输出重定向到标准输出
https://www.jb51.net/article/264888.htm

shell 错误输出重定向到标准输出

和<是文件重定向符。那么1和2是什么?

shell中每个进程都和三个系统文件相关联

标准输入stdin

标准输出stdout

标准错误stderr

三个系统文件的文件描述符分别为0,1和2。

所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

下面通过一个例子来展示2>&1有什么作用:

创建一个 test.sh

内容如下:

c 复制代码
#!/bin/sh
t
date

执行

chmod 777 test.sh

./test.sh

c 复制代码
./test.sh: line 2: t: command not found
Mon Aug 19 10:56:50 CST 2024

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。

date则能正确执行,并且输出时间信息,默认输出到stdout。

标准输出重定向到log文件中,标准错误打印在屏幕上

c 复制代码
 ./test.sh > test1.log

输出结果为

c 复制代码
./test.sh: line 2: t: command not found

文件中的内容为

cat test1.log

c 复制代码
Mon Aug 19 10:58:47 CST 2024

可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

标准输处和标准错误重定向到同一log文件中

c 复制代码
./test.sh > test2.log 2>&1

cat test2.log

c 复制代码
./test.sh: line 2: t: command not found
Mon Aug 19 11:05:03 CST 2024

这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, >就相当于1>也就是重定向标准输出,不包括标准错误。

通过2>&1,就将标准错误重定向到标准输出了(stderr已作为stdout的副本),

那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。

标准输处和标准错误重定向到不同log文件中

如果只想重定向标准错误到文件中,则可以使用2> file。

c 复制代码
sh test.sh 1>log.log 2>log_err.log

如何将shell脚本的全部执行结果记入一个log文件

c 复制代码
./test.sh >>logfile 2>&1

执行脚本test.sh时将错误输出2以及标准输出1都一起以附加写方式导入logfile文件。

即使多次执行脚本,之前的log也仍然存在。

/dev/null

如果希望执行某个命令,但又不希望在屏幕上显示出输出的结果,那么可以将输出重定向到/dev/null:

c 复制代码
$ command > /dev/null

/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读取不到。

但是/dev/null文件非常的有用,将命令的输出重定向到它,会起到"静止输出"的效果。

如果希望屏蔽stdout和stderr,则可以这样写:

c 复制代码
$ command > /dev/null 2>&1

注意:0是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)

相关推荐
特立独行的猫A5 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
无奈笑天下7 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla10 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理11 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州11 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
budingxiaomoli12 小时前
Spring统一功能处理
java·后端·spring
Flynn Liang13 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
金銀銅鐵13 小时前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
火云代理14 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖15 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习