shell脚本专题-----文件描述符和重定向(四)

通过内容过滤将输出重定向到文件是我们平日里的基本任务之一.当命令输出文本时,这些输出文本有可能是错误信息,也有可能是正常的输出信息.单靠查看输出的文本本身,我们没有办法区别哪些是正常的,哪些是错误的.不过可以通过文件描述符来解决这个问题.
文件描述符是与某个打开的文件或者数据流相关联的整数.文件描述符0,1,2是系统预留的.
0-----stdin(标准输入);
1-----stdout(标准输出);
2-----stderr(标准错误);

例子1

echo "测试" > test.txt

会将 测试 写入到文本test.txt中, 如果文件不存在就自动创建, 如果存在则将文本内容清空以后再写入.

例子2

echo "测试" >> test.txt

会将 测试 写入到文本test.txt中, 如果文件不存在就自动创建, 如果存在则将会将内容追加在原来的内容后面.

例子3 (错误重定向)

ls printf.sh aaa 2>> 2.txt 1>>1.txt

会将错误的内容输出到2.txt , 标准的输出会写入到1.txt中.

例子4(stderr转化为stdout)

cmd &> output.txt

在这里插入图片描述
例子5(终端不显示stderr或者stdout)
有的时候不想让终端显示错误的输出,那么只需要将错误的输出重定向到/dev/null中,

ls -ah printf.sh qqq 2>/dev/null

那么输出就只有: printf.sh

同理,如果只想显示错误的输出,那么命令如下:

ls -ah printf.sh qqq 1>/dev/null

例子6(既想在终端显示stdout,又想将内容保存在文本中)
这个操作可以使用管道(|) 来实现.

ls -ah length.sh aaa | tee -a 3.txt

备注: -a选项是将内容追加到3.txt中,不加-a,则是将原来的内容覆盖.
这个只会将stdout内容写入3.txt中,stderr不会写入

ls -ah length.sh aaa 2>&1 | tee -a 3.txt

备注: -a选项是将内容追加到3.txt中,不加-a,则是将原来的内容覆盖.
加上2>&1, 这个会将stdout和stderr内容都写入3.txt中

猜你喜欢

转载自blog.csdn.net/hongge_smile/article/details/109267402