管道左侧的输出是否成为管道右侧的参数

管道左侧的输出是否成为管道右侧的参数

我很难理解管道是如何工作的。起初我按照标题想到了它们,但我无法得到一个简单的例子来说明。例如

mkdir temp
cd temp
echo "rubbish" > txtfile

ls | cat
txtfile # why does it not return "rubbish"?

ls | cut -c 2-4
xtf # result I expected.

我读过很多管道教程,但似乎没有一个超出“LHS 的 STDOUT 成为 RHS 的 STDIN”的范围,我很好奇 RHS 的 STDIN 是什么。它会成为第一个参数吗?当管道的 RHS 有选项或多个参数时,它会放在哪里。是否发生了任何类型的宏替换,还是我的想法偏离了主题。

鉴于上述示例,cut 是否从 stdin 获取输入,而 cat 不获取?如何知道哪些命令从 stdin 获取输入,哪些命令不获取输入?

答案1

RHS 的 STDIN 是什么。它会成为第一个参数吗?

不,它们是完全独立的东西 - 例如STDIN 和传递给命令的参数之间有什么区别?

cut 是否从 stdin 获取输入,而 cat 却不获取?

在这种情况下,它们都从 STDIN 获取输入,并且该输入是细绳 txtfile。如果你想通过文件名 textfile作为参数,你可以使用xargs

ls | xargs cat
ls | xargs cut -c 2-4

但不要-看为什么不是解析ls(以及该做什么)?

如何知道哪些命令从标准输入获取输入,哪些命令不从标准输入获取输入?

您阅读了该命令的(精细)手册页,例如man cut

NAME
       cut - remove sections from each line of files

SYNOPSIS
       cut OPTION... [FILE]...

DESCRIPTION
       Print selected parts of lines from each FILE to standard output.

       With no FILE, or when FILE is -, read standard input.

相关内容