Linux 在Bash中将printf管道传输到ls?
因此,我正在学习bash中的管道,我发现了以下简洁的描述: Unix管道连接的标准输出文件描述符 第一个进程转换为第二个进程的标准输入。什么 然后发生的情况是,当第一个进程写入其标准输出时 第二个进程可以立即读取(从STDIN)输出 基于这种理解,让我们将Linux 在Bash中将printf管道传输到ls?,linux,bash,shell,Linux,Bash,Shell,因此,我正在学习bash中的管道,我发现了以下简洁的描述: Unix管道连接的标准输出文件描述符 第一个进程转换为第二个进程的标准输入。什么 然后发生的情况是,当第一个进程写入其标准输出时 第二个进程可以立即读取(从STDIN)输出 基于这种理解,让我们将printf的STDOUT连接到ls的STDIN。为简单起见,请打印父目录(printf..) 我想做:ls..,但似乎我得到的只是ls。为什么会这样?如何使用管道ls父目录?我是不是误解了管道?问题是ls没有按照您的预期读取stdin。您需
printf
的STDOUT连接到ls
的STDIN。为简单起见,请打印父目录(printf..
)
我想做:
ls..
,但似乎我得到的只是ls
。为什么会这样?如何使用管道ls
父目录?我是不是误解了管道?问题是ls
没有按照您的预期读取stdin
。您需要使用从stdin
读取的工具,如xargs
,并将读取的输入馈送到ls
printf "someSampleFolderOrFile" | xargs ls
xargs-man
page
xargs-从标准输入生成和执行命令行
许多程序不从
stdin
读取数据,而不仅仅是ls
。程序也可能不会写入标准输出
这里有一个小实验,可能会澄清一些事情。执行以下步骤:
cat > file1
This is file1
^D
^D是您按下的+D
,这是文件的默认结尾。因此,首先我们调用cat
程序并将其stdout
重定向到file1
。如果您不提供输入文件名,那么它将从stdin中读取,因此我们键入“This is file1”
现在做类似的事情:
cat > file2
This is file2
^D
现在如果你:
cat < file1
如果你:
cat file1 | cat file2
或:
按照惯例,
-
表示标准流,读取时为stdin
,写入时为stdout
。ls
不从标准输入读取。因此,ls..
是在这里获得您想要的东西的方法man ls
是你的朋友。那么这仅仅是ls
的一个属性吗?我对管道的理解是否正确?ls..
是否没有从STDIN获取。
参数?您需要将xargs
与ls
@KennethWordenYes一起使用,这是ls
的一个属性,它不会从STDIN读取参数(因此管道不会产生任何效果)。我的问题更多的是管道如何工作,不过还是要谢谢你的回答。
This is file1
cat file1 | cat file2
cat file2 < file1
cat - file1 < file2