将一个命令循环放在Linux中的参数列表中

如何使用由另一个命令通过pipe道传递的参数执行相同的命令?

从源文件中提取文件名的结果是:

     $ some_command
    文件名1
    文件名2
     filename3
     ...
     filenameN

我想用这些文件名与touch创build文件。 我怎样才能循环这些名字?

我只用来做…做非常简单的情况。

对于更复杂/危险的情况:

 command | sed 's/^/touch /' 

这只是打印想要的命令。 检查结果,然后执行同样的事情pipe道到sh -x-x标志用于debugging):

 command | sed 's/^/touch /' | sh -x 

您可以使用xargs和-n1为每个pipe道参数运行一次命令

 $some_command | xargs -n 1 touch 

在触摸的情况下,但接受多个参数

 touch `$some_command` 

可能会为你工作。

 for i in `$some_command`; do touch $i; done 

如果文件名包含空格,那么下面的内容将解决它们:

 some_command | while read filename ; do touch "$filename" ; done 

这将创build名为的文件:
文件名1
文件名2
命名文件3
等等

当然,假设它确实产生了这些名字。

“some_command | xargs touch”可能会诀窍,但是有两个缺陷:

  1. 如果一个文件名包含任何空白字符,它将被视为一个分隔符,例如文件名“fuh bar”将以这种方式作为名为“fuh”的文件被触摸,另一个名为“bar”而不是单身“福吧”之一。 为了减轻这一点,你可以检查你的“some_command”是否能够产生另一个分隔符,通常是NULL(参见命令find的“-print0”参数合法),并使用xargs的“–null”参数
  2. 如果命令不产生任何东西,xargs将会失败。 使用它的“–no-run-if-empty”参数