1.5 数据流重导向(redirect)
1.5.1 LINUX中的数据流问题
当我们执行一个指令时,此指令可能由文件读取资料,经处理之后,输出到屏幕上,此外,若指令执行失败,则会传回错误指示。
在这个过程中,
-
输出操作被称为:Standend output,简称STDOUT。输出代码为1,使用符号>或>>表示。
-
输出错误操作被称为:Standend error output,简称STDERR。输出代码为2,使用符号2>或2>>表示。
其中,对于输出方式而言,我们可以将输出的信息直接指向文件,进行保存,这样也可以节省屏幕空间。使用规则如下:-
1>:将“正确的数据”覆盖输出至指定文件或装置。
-
1>>:将“正确的数据”累加输出至指定文件或装置。
-
2>:将“错误的数据”覆盖输出至指定文件或装置。
-
2>>:将“错误的数据”累加输出至指定文件或装置。
[haoqiqi@localhost ~]$ find /home -name .bashrc /home/haoqiqi/.bashrc find: ‘/home/haoqiqi/.cache/gnome-control-center’: 权限不够 #其中,输出的第一行为STDOUT,第二行为STDERR。
[haoqiqi@localhost ~]$ find /home -name .bashrc 1>list find: ‘/home/haoqiqi/.cache/gnome-control-center’: 权限不够 [haoqiqi@localhost ~]$ find /home -name .bashrc 2>list /home/haoqiqi/.bashrc
可以看出,当使用1>时,正确信息被输出值list中,保留了错误信息,使用2>则完全相反。
-
垃圾桶黑洞装置:/dev/null。对于我们不想要的信息,可以在后面加/dev/null,直接丢弃信息。
[haoqiqi@localhost ~]$ find /home -name .bashrc 2>/dev/null /home/haoqiqi/.bashrc
-
将所有输出信息保存至一个文件下
[haoqiqi@localhost ~]$ find /home -name .bashrc >list 2>&1 [haoqiqi@localhost ~]$
此时将没有任何输出信息,因为他们都被输出至list文件中了。
-
-
读取操作被称为:Standard input,简称STDIN。输出代码为0,使用符号<或<<表示。
对于读取操作,简单的理解就是:将原本由键盘输入的数据,改为由文件内容来取代。
下面首先使用cat指令创建文件,并利用键盘输入内容。[haoqiqi@localhost ~]$ cat >new_cat_file These are wrinting by my keyboard! #按下ctrl+D退出输入
然后执行以下语句,得到文件中的内容:
[haoqiqi@localhost ~]$ cat new_cat_file These are wrinting by my keyboard!
cat指令后面加上了">",因此new_cat_file文件会被主动创建,其内容是刚才打上去的。
现在,使用stdin取代键盘的输入向文件中写入内容。[haoqiqi@localhost ~]$ cat >new_cat_file <~/.bashrc [haoqiqi@localhost ~]$ ll new_cat_file ~/.bashrc -rw-r--r--. 1 haoqiqi haoqiqi 231 8月 8 20:06 /home/haoqiqi/.bashrc -rw-rw-r--. 1 haoqiqi haoqiqi 231 10月 10 19:41 new_cat_file [haoqiqi@localhost ~]$ cat new_cat_file # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions #本例中,由于使用的是“>”,因此之前写入的字符被覆盖掉了。
1.5.2 命令执行的判断依据(“;”,“$$” , “ ||”)
- 分号";":不考虑指令相关性的连续指令下达
假如我们需要一次执行多个指令,则可以在每条指令后加分号(类比MATLAB)。 - 指令回传值"$?"与 “&&”、“||”
之前讲过指令回传值的概念。对于指令回传值,若前一个指令执行的结果为正确,则回传$?=0。它与“&&”、“||”的关系如下表所示:
指令下达情况 | 说明 |
---|---|
cmd1&&cmd2 | 1.若cmd1执行完毕且正确($?=0),则开始执行cmd2 2.若cmd1执行完毕且错误($?≠0),则不执行cmd2 |
cmd1||cmd2 | 1.若cmd1执行完毕且正确($?=0),则不执行cmd2 2.若cmd1执行完毕且错误($?≠0),则开始执行cmd2 |
本节内容就这些了, 欢迎关注我的微信公众号与我联系。