内容:  在我们Linux系统中默认输入是键盘,输出是显示器。我们可以用重定向来改变这些设置。重定向可以用来将命令输入和输出数据流从默认位置重定向到其他位置,其输入或输出数据流的位置称为句柄;常见的句柄有三种,当然句柄可以自行扩展,一般的OS都提供类似的功能。

最常见的就是以下三个:

设备	    设备名	         文件描述符	     类型
键盘	    /dev/stdin	     0	            标准输入
显示器	/dev/stdout	     1	            标准输出
显示器	/dev/stderr	     2	            标准错误输出

重定向符:

>  :将命令输出写入文件或设备,而不是命令提示符或句柄.文件中的内容会先清空,再写入内容
<  :从文件而不是从键盘或句柄读入命令输入.将文本追加到目标文件中。
例子:
echo "Hello world" > tmp.txt
echo "Hello world" >> tmp.txt

>> :将命令输出添加到文件末尾而不删除文件中已有的信息
>& :将一个句柄的输出写入到另一个句柄的输入中
<& :从一个句柄读取输入并将其写入到另一个句柄输出中
|  :从一个命令中读取输出并将其写入另一个命令的输入中;也称为管道操作符
>&n: 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
<&n: 标准输入复制自文件描述符 n;
<&-: 关闭标准输入(键盘);
>&-: 关闭标准输出;
n<&-: 表示将 n 号输入关闭;
n>&-: 表示将 n 号输出关闭;

命令实例:

cmd 2>stderr.txt 1> stdout.txt #stderr重定向到一个文件,stdout重定向到另一个文件
cmd > output.txt 2>&1 #将stderr转换成stdout,使得stderr和stdout都重定向到同一个文件中
cmd &> out.txt #作用同上
cmd 2> /dev/null #将stderr重定向到/dev/null
cmd > file 把 stdout 重定向到 file 文件中;
cmd >> file 把 stdout 重定向到 file 文件中(追加);
cmd 1> fiel 把 stdout 重定向到 file 文件中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;
cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;
cat <>file 以读写的方式打开 file;
cmd < file cmd 命令以 file 文件作为 stdin;

实践:

1.标准输出的控制
语法:命令> 文件将命令的执行结果送至指定的文件中

centos下串口重定向_centos下串口重定向


打开test.txt查看:

centos下串口重定向_centos下串口重定向_02

2.将编译c 文件时所产生的任何信息写入错误流中或文件中
gcc XX.c >& error
gcc dup.c  >& test.txt

centos下串口重定向_centos下串口重定向_03


验证一下:打开test.txt

centos下串口重定向_centos下串口重定向_04

注:
1./dev/null是一个特殊的设备文件,该文件收到任何数据都会被丢弃。也被称为位桶(bit bucket)或垃圾黑洞。
2.当对stderr或stdout进行重定向时,重定向的文本将传入文件,就不能将输出通过管道(|)传给接下来的命令,而这些命令是通过stdin来接收文本的。
3.使用重定向操作符时,重定向的内容不会出现在终端,而是直接被导入文件。默认使用标准输出。(>等同于 1>)如果想使用特定的文件描述符,必须将描述符置于操作符前。
4.当一个命令发生错误并退出时,会返回一个非0的退出状态;成功运行返回数字0。退出状态可通过状态变量 $?获得。