> 重定向当前命令的标准输出(STDOUT)到一个文件或者一个描述符。
下面的例子把ls命令的输出存到file.txt文件
目标文件如果不存在就会被创建,或者文件被截断。
如果不指定,默认重定向描述符是标准输出或1。下面的命令等同于上面的例子:
截断 >
1.如果文件不存在则创建
2.截断(删除文件内容)
3.写入文件
追加 >>
1.如果文件不存在则创建
2.追加文件(在文件底部写)
文件描述符像0和1都是指针。我们更改的是文件描述符的指向。
>/dev/null意思是1指向/dev/null。
首先我们把1(STDOUT)指向/dev/null,然后2指向1(不管1指向什么)。
可以更短点:
echo_to_stdout_and_stderr &> /dev/null
有时候你想把一个程序的标准输出作为其它多个程序的标准输入,这时候就不能用标准管道了,不过你可以写入一个临时文件,如:
这个方法可以在大多数情况下有效,但谁都不知道tempFile.txt会被哪个程序删除或者修改里面的内容。这时候命名管道就可以用上场了。
myPipe在技术上是一个文件,所以我们来用ls -l看下当前创建管道的目录
输出为:
prw-r–r– 1 root root 0 Jul 25 11:20 myPipe
注意权限的第一个字符,显示是pipe,不是文件。
现在我们做了有意思的。
打开一个终端,在一个空目录创建管道:
现在我们输入点东西到管道:
你会注意到这个命令被挂起了,让我们打开一个新的终端,输入:
你会发现当”hello from the other side”输出后,终端1就完成了,终端2也一样。
现在我们反向运行程序,先执行cat 输出错误信息到标准错误
错误信息通常为了调度会包含在脚本里。简单的输出错误信息如下:
可能会在简单的场景工作,但不是通常的做法。在这个例子中,错误信息会会污染脚本实际的输出。简单来说,错误信息应该输出到标准错误而不是标准输出,如:
其它例子:
可以封装成一个函数: