符号具体运用以及平时shell脚本中常见的、、2、2、、等那些奇奇怪怪的符号,通过简单通俗的例子,让你真正搞懂shell。
linux系统中,通常是命令从你的终端接受输入并将所产生的输出发送回到你的终端。一个命令通常从一个叫标准输入的地方读取输入,而默认情况下,这刚好就是你的终端。同样的,一个命令通常将其输出写入到标准输出,而默认情况下,这也正好是你的终端。
但是有时候我们并不希望命令从标准的地方输入,也不希望命令输出写入到标准输出。此时我们就可以采用输入输出重定向,让其输入或者输出都重定向到其它地方,如文件等。这就是输入输出重定向的由来了。
1、:作用是将标准输出重定向到一个文件中(会清空原有文件的内容),主要用法是:命令 文件;
2、:作用是将标准输出重定向到一个文件中(追加到原有文件内容后面),主要用法是:命令 文件;
4、:作用是从标准输入中读入,直到遇见“分界符”才停止,主要用法是:命令 分界符;
其次,我没呢通过ll /haotest命令查看一下/haotest目录下的文件列表。如下所示:
通过上面两条执行命令发现,都有返回结果。实际上两个返回结果有所差异。我们称第一个返回结果为标准输出,第二个返回结果为错误输出。实际上,这就是linux系统中的文件描述符。文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来访问文件。
正是因为存在以上三种文件描述符,所以就会存在将这三种文件描述符对应的输入输出进行重定向的可能。而默认情况下,命令 文件是将 stdout(标准输出)重定向到文件,命令 文件将stdin(标准输入)重定向到文件。
1、2:作用是将错误输出重定向到一个文件中(会清空原有文件的内容),主要用法是:命令 2 文件;
2、2:作用是将错误输出重定向到一个文件中(追加到原有文件内容后面),主要用法是:命令 2 文件;
不知道大家发现没有,讲了这么多,我们的主角2&1似乎还没有登场呢!其实它就是将stdout(标准输出)和stderr(错误输出)合并后进行重定向的。
1、 2&1:作用是将标准输出与错误输出都重定向到文件中(会清空原有文件的内容),主要用法是:命令 文件 2&1;
2、 2&1:作用是将标准输出与错误输出都重定向到文件中(追加到原有文件内容后面),主要用法是:命令 文件 2&1;
如我系统家目录下想执行ls -l命令,但是不想让结果打印输出到屏幕,想重定向放到print01.txt文件,则完整命令如下:
该命令与命令 文件区别在于无论执行多少次,都会在文件中追加保存执行结果,不会覆盖原文件内容。
如我系统家目录下想执行ls -l命令,但是不想让结果打印输出到屏幕,想重定向放到print02.txt文件,并且每次执行不会清空覆盖文件中已有内容,则完整命令如下:
这个跟命令 文件的用法差不多,区别在于文件描述符不一样。如我想通过cat命令查看一个文件hhhh.txt的内容,但是这个hhhh.txt文件不存在,此时想把错误输出重定向到print04.txt文件中,具体命令如下:
并且无论cat hhhh.txt 2 print04.txt执行多少次,只会保存一条结果,即清空原文件内容进行保存。
这个跟命令 2 文件的用法一样,区别在于将错误输出重定向追加保存到文件当中,不会覆盖原文件内容。
如我想通过cat命令查看一个文件aaaa.txt的内容,但是这个aaaa.txt文件不存在,此时想把错误输出重定向到print05.txt文件中,具体命令如下:
1)首先在当前目录创建一个print06.txt文件,文件写进内容:欢迎关注公众号:浩道linux;
这个跟命令 文件 2&1命令用法差不多,区别在于标准输出重定向或错误输出重定向追加保存到文件当中,不会覆盖原文件内容。
以上就是针对各个输入输出重定向命令一一举例说明。相信此时你对2&1不再陌生,其实实际工作中用得最多的还是2&1,它主要用在将某些命令执行结果重定向到/dev/null文件当中,/dev/null是一个特殊的文件,写入到它的内容都会被丢弃 ,即可以起到禁止输出的作用,主要命令格式如下:

