1、>和>>
> 【重定向】
如果文件不存在,则创建,并将内容输入到文件;
如果文件存在,则先清空文件,然后将内容输入到文件;
>> 【追加】
如果文件不存在,则创建,并将内容输入到文件;
如果文件存在,则将内容添加到原文件内容之后;
示例:
# cat /root/test
123456
# echo "abcdefg" > /root/test
# cat /root/test
abcdefg // 原文件被覆盖;
# echo “123456” >> /root/test
# cat /root/test
abcdefg
123456 // 在原文件后面追加;
2、标准输出与错误输出
在 shell 程序中,最常使用的 fd (file descriptor) ,文件描述符有三个:
0(stdin):标准输入,是一个文件描述符
1(stdout):标准输出, 是一个文件描述符
2 (stderr):错误输出,是一个文件描述符
我们创建一个测试目录gemini,目录中只创建一个文件it01.txt,
然后执行命令:
# ls -l it01.txt 回显结果:正确,我们叫做“标准输出”,用描述符1表示
# ls -l it02.txt 回显结果:错误,我们叫做“错误输出”,用描述符2表示
执行命令不要任何回显结果,把回显结果重定向到对应文件中
# ls -l it01.txt it02.txt 1>file.out 2>file.err
“1>” 可以简略成“>”
3、"1>&2" 和 "2>&1"
【2>&1】
把“错误输出,重定向到,标准输出”,需要先定义“标准输出到哪个文件”
1,标准输出,回显结果:正确
2,错误输出,回显结果:错误
可能大家会纳闷,不应该写成“2>1”吗?
为什么多了个“&”?
&只是一个特殊符号。
# ls -l it01.txt it02.txt 1>file.out 2>1
如果不加“&”,“2>1”的意思是,把“错误输出”重定向到“文件名是1的文件中”
# ls -l it01.txt it02.txt 1>file.out 2>&1
加上“&”,才能实现“把标准输出重定向file.out,错误输出重定向到标准输出”
【1>&2】
把“标准输出,重定向到,错误输出”,需要先定义“错误输出到哪个文件”
# ls -l it01.txt it02.txt 2>file.err 1>&2