Linux Bash Input re direction向命令提供标准输入,而不是参数/文件名?
我创建了一个名为“com”的文件,其中包含 章* 然后,我尝试在bash中运行以下命令: lsLinux Bash Input re direction向命令提供标准输入,而不是参数/文件名?,linux,bash,shell,Linux,Bash,Shell,我创建了一个名为“com”的文件,其中包含 章* 然后,我尝试在bash中运行以下命令: ls
ls $(<com)
允许语法:$(cat com
更快地工作,因为它是内置的(无fork)
使用STDIN传递参数
有一个命令xargs
用于执行此操作:
xargs /bin/ls <com
另一种方法:
ls `cat com`
以及:
在反勾号之间键入的所有内容都由shell在主命令之前计算(执行),该命令使用该执行的输出,就像您在命令行中的该位置键入该输出一样
-从回答到
更新
以下是您未能获得预期结果的原因:
并非所有命令都从标准输入读取。常见Unix示例
从不从标准输入读取的命令:ls、cp、mv、date、who、pwd、echo、cd
除了上面的cp
之外,以上所有命令都有共同点
事实上,他们从未打开任何文件进行读取如果命令从未执行过
从任何文件读取任何数据,但无法从标准输入读取任何数据。
如果(且仅当!)命令读取标准输入,则重定向
标准输入将导致程序读取您附加到的任何内容
标准输入。
-从
ls不从标准输入读取参数,而是从命令行读取参数 你可以简单地做: ls-l$(cat com) 据我所知,shell将从文件“com”中获取输入章*,并将其放在ls旁边 不,不是这个意思
ls < com
由于ls
不读取其标准输入,因此忽略com
中的数据。正如另一个答案所述,您描述的行为是通过以下方式实现的:
ls $(<com)
ls$(谢谢!这很有效。但是我对我的方法为什么不起作用以及你为什么起作用感兴趣?/bin/ls
使用参数,而不是STDIN。你可以写:ls$(cat com)
。允许语法:$(
,并且比$(cat…
或`cat com`
工作得更快,因为它是内置的(无fork)。使用xargs
将STDIN与ls
一起使用。请参阅我的编辑。不幸的是,这不起作用。ls:无法访问cat com:没有此类文件或directory@MiteshMS出于好奇,您是否用
(单引号)或`
(反勾号)围绕cat com
哦,糟糕。谢谢!它现在正在使用反勾号。你能解释一下为什么这样做吗?对否决票的解释将有助于理解为什么这个答案是错误的…“grep”不是列在那里的命令。那么为什么下面的命令不起作用:grep谢谢。这也很有效!所以没有任何命令接受它们的参数吗标准输入的nts/参数?还有,您的命令为什么工作?请看以下内容:file\u content=$(cat文件);ls-l$file_content
应该更容易理解它的工作原理。许多命令确实接受stdin的输入。尝试使用sort进行实验例如:$sort
我用grep
和sort
做了同样的尝试,但它们似乎都没有将标准输入作为参数读取?是否有任何命令and哪些读取该值?@MiteshMS如果希望标准输入的数据用作命令行参数,则使用xargs
。传递xargs
命令,并将参数输入标准in。例如,echo file.txt|xargs ls
相当于ls file.txt
cat `cat list_of_filenames_to_give_input_to_cat_command`
ls < com
cat com | ls
ls $(<com)