Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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 Input re direction向命令提供标准输入,而不是参数/文件名?_Linux_Bash_Shell - Fatal编程技术网

Linux Bash Input re direction向命令提供标准输入,而不是参数/文件名?

Linux Bash Input re direction向命令提供标准输入,而不是参数/文件名?,linux,bash,shell,Linux,Bash,Shell,我创建了一个名为“com”的文件,其中包含 章* 然后,我尝试在bash中运行以下命令: ls

我创建了一个名为“com”的文件,其中包含

章*

然后,我尝试在bash中运行以下命令:

ls 据我所知,shell将接受输入 章* 从文件“com”中,将其放置在ls旁边,结果如下:

ls章*

现在,这个命令应该列出以“Chapter”开头的所有文件,但它会打印当前目录中的所有文件

以下命令也会发生这种情况

cat<文件名列表\u到\u给\u输入\u到\u cat\u命令

“列出\u文件名\u给\u输入\u给\u猫\u命令”包含以下内容:

快速排序

合并排序

radixsort.c

这将打印上述每个文件的内容。相反,它只打印文件名,如下所示:

快速排序

合并排序

radixsort.c

感谢您的帮助!谢谢。

试试这个:

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)