shell输入/输出重定向

在shell里也和我们程序中一样:0代表标准输入(stdin),使用<和<<,/dev/stdin->/proc/self/fd/0 0代表:/dev/stdin;
1代表标准输出(stdout),使用>和>>,/dev/stdout->/proc/self/fd/1 1代表:/dev/stdout;
2代表标准错误输出(stderr): /dev/stderr->/proc/self/fd/2 2代表:/dev/stderr:
这里写图片描述
三个文件都是link文件,而且是个硬链接。

输出重定向:

1说明:
1) 输出主要是使用”>”和”>>”,但是二者的功能是不一样的:遇到右文件,前者如果文件不存在创建文件,并将数据写入,如果文件存在那么会清楚文件内容重新写入;后者是文件不存在创建文件,写入数据,文件存在将数据追加在文件尾部。
2) 当执行完时,绑定文件的描述符会自动失效。0、1、2会空闲
3) 在命令执行前会检查输出是否正确,如果输出设备错误将不执行命令。
2 重定向使用:
这里写图片描述
第一行命令是我们正常的标准和错误输出,错误输出是直接输出到屏幕,标准需要经过缓存区,所以看到先输出的是错误输出。
第二行是对’>’的使用,将标准和错误输出都输出到test.txt文件中,注意这实在执行一条命令,所以后面的’>’不会清除前面的’>’输出内容,我们在执行完命令后产看test.txt发现和正常输出一样。
第四五行验证’>’输出的清除文件功能。
这里写图片描述
第一行是将标准和错误输出绑定在/dev/null设备上,这个设备会将所有的输出化为乌有,不会输出在任何设备上
第二行和第一行一样,将标准输出绑定在/dev/null设备上,将错误输出绑定在标准输出上,最终同样输出给/dev/null,二者我们通常用的是第二种。
第三行命令是将错误输出关闭,所以只会输出标准输出
最后一行的’&’代表的是标准输出和错误输出,所以不会在屏幕打印任何消息,’>’左边没有指示则只代表标准输出

输入重定向:

1) 一般默认的输入是从键盘输入到屏幕,我们可以通过输入重定向让直接从文件输入,或者我们可以通过一个文件输入给另一个文件。
2) 输入重定向:
这里写图片描述
使用的是cat 命令和’>’将信息输入到文件中,使用’>>’追加消息
这里写图片描述
这里我们使用echo和上面cat用法一样,将消息输出给文件,第四行是结合输出重定向和输入重定向,将从test.txt的输入重定向输出到test1.txt中。
exec绑定重定向:
上面的所有重定向只是在当前命令中有用,但是exec绑定会对所有都支持,下面我们看看例子:
这里写图片描述
这里我们重新建立一个标准输出6,把标准输出绑定到文件test.txt后,发现ls输出不显示了,那是所有输出重定向到了文件test.txt中,我们重新回复标准输出后并将输出副本6关闭。再次ls输出到屏幕了。exec 重定向绑定只在当前终端中有效,所有大家可以大胆玩,如果不小心将副本删除,回复不了定向,关闭终端就可以了。

猜你喜欢

转载自blog.csdn.net/magiclyj/article/details/77715705