Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在Bash中将printf管道传输到ls?_Linux_Bash_Shell - Fatal编程技术网

Linux 在Bash中将printf管道传输到ls?

Linux 在Bash中将printf管道传输到ls?,linux,bash,shell,Linux,Bash,Shell,因此,我正在学习bash中的管道,我发现了以下简洁的描述: Unix管道连接的标准输出文件描述符 第一个进程转换为第二个进程的标准输入。什么 然后发生的情况是,当第一个进程写入其标准输出时 第二个进程可以立即读取(从STDIN)输出 基于这种理解,让我们将printf的STDOUT连接到ls的STDIN。为简单起见,请打印父目录(printf..) 我想做:ls..,但似乎我得到的只是ls。为什么会这样?如何使用管道ls父目录?我是不是误解了管道?问题是ls没有按照您的预期读取stdin。您需

因此,我正在学习bash中的管道,我发现了以下简洁的描述:

Unix管道连接的标准输出文件描述符 第一个进程转换为第二个进程的标准输入。什么 然后发生的情况是,当第一个进程写入其标准输出时 第二个进程可以立即读取(从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