*nix 中管道的使用

*nix 中管道的使用

我是一个比较有经验的Linux用户。我想更好地理解何时在 Unix/Linux 中使用管道有意义。

根据所有书籍参考文献,管道|用于从左到右将命令连接在一起。当与lsps、等常用命令一起使用时,echo很容易理解管道工作得非常好,因为前面的命令仅产生输出,而无需打开缓冲区查看器(例如less)等内容。

因此,如果我执行ls | tr -d 'a',我们都知道一切正常。但如果我执行top -n 1 | grep 'average',事情就会开始变得有点奇怪。事实上,如果我们使用管道左侧的面向屏幕的命令,管道操作符本身会尝试重定向该命令的输出,有时很难理解哪种输出重定向。我认为这是由于在这种情况下管道运算符的错误使用造成的。

问题是:“我们什么时候应该使用管道运算符?如果我尝试对某些命令(例如 top 和其他面向屏幕的命令)使用管道右侧会发生什么?”

谢谢。

答案1

管道运算符 (| ) 连接两个命令(或命令列表)。输出 (标准输出)从左侧连接到输入(标准输入)右边的那个。您需要确保第一个的输出适合第二个的输入。请注意,通常误差通道(标准错误) 不通过管道重定向,而是从管道中的任何进程直接写入终端。

在 的情况下top,它假设它正在交互式会话中写入终端。您可以使用该-b标志告诉它应该采用批处理环境;这将关闭终端定位序列、颜色和键盘输入。

top -b -n1 | grep average
top - 21:43:52 up 4 days,  9:49,  0 user,  load average: 0.00, 0.00, 0.00

某些命令,例如ls检测它们何时直接写入终端或其他输出流并适当修改其输出。例如,在包含多个文件的目录中,比较lsls | cat

相关内容