我有一个名为"input.txt"的文件.包含一行:
/bin
Run Code Online (Sandbox Code Playgroud)
我想使文件的内容成为命令的输入 ls
我试过了
cat input.txt | ls
Run Code Online (Sandbox Code Playgroud)
但它不会输出/ bin目录中的文件列表
我也试过了
ls < input.txt
Run Code Online (Sandbox Code Playgroud)
无济于事.
您正在寻找xargs命令.
xargs ls < input.txt
Run Code Online (Sandbox Code Playgroud)
你说你想/bin成为"输入" ls,但这不正确; ls它的输入没有做任何事情.相反,您希望/bin作为命令行参数传递给ls.
输入和参数是完全不同的东西; 将文本作为输入提供给命令与将该文本作为参数提供不同.的差异可以通过一个事实,即许多命令,如被模糊cat,将会对无论是它们的输入或它们的参数(或两者)工作-但即使在那里,我们发现一个重要的区别:他们的实际操作上是文件的内容,其名称作为参数传递.
该xargs命令专门用于在这两件事之间进行转换:它将其输入解释为以空格分隔的命令行参数列表,以传递给其他命令.在这种情况下,该另一个命令xargs作为其命令行参数提供ls.
由于shell via提供的输入重定向,这里提供<的参数来自文件.xargslsinput.txt
还有其他方法可以完成同样的事情; 例如,只要input.txt没有那么多文件,它们就不适合单个命令行,你就可以这样做:
ls $(< input.txt)
Run Code Online (Sandbox Code Playgroud)
上述命令和xargs版本都会将input.txt文件中的任何空格视为分隔文件名,因此如果您的文件名包含空格字符,则必须做更多工作才能正确解释文件.另请注意,如果任何文件名包含通配符/"glob"字符(如?或*或[......)],则$(<... )版本会将它们扩展为通配符模式,而xargs不会.
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |