我有一个名为“ input.txt”的文件。包含一行:
/bin
我想使文件的内容成为命令的输入 ls
我试着做
cat input.txt | ls
但不会输出/ bin目录中的文件列表
我也试过
ls < input.txt
无济于事。
您正在寻找xargs
(transpose arguments)命令。
xargs ls < input.txt
您说您想/bin
成为的“输入” ls
,但这是不正确的。ls
输入不做任何事情。相反,您希望/bin
作为命令行参数传递给ls
,就像您已经键入一样ls /bin
。
输入和参数完全不同。将文本作为命令输入到命令与将文本作为参数输入是不同的。的差异可以通过一个事实,即许多命令,如被模糊cat
了他们实际操作上就是:但即使在那里,我们发现一个重要的区别- ,将在任何他们的输入或它们的参数(或两者)操作的文件内容,其名称作为参数传递。
该xargs
命令经过专门设计,可在这两种情况之间进行转换:将其输入解释为以空格分隔的命令行参数列表,以传递给其他命令。在这种情况下,另一个命令将xargs
作为其命令行参数提供ls
。
由于shell via提供的输入重定向,此处提供<
的参数来自文件。xargs
ls
input.txt
还有其他方法可以完成同一件事。例如,只要其中input.txt
没有太多文件以致于它们不能放在单个命令行中,您可以执行以下操作:
ls $(< input.txt)
上面的命令和xargs
版本都将input.txt
文件中的任何空格都视为分隔的文件名,因此,如果文件名包含空格字符,则必须做更多的工作才能正确解释文件。另外,请注意,如果任何文件名包含通配符/“ glob”字符(例如?
或*
或[
...)]
,则$(<
...)
版本会将其扩展为通配符模式,而xargs
不会。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句