在 Linux 中循环执行参数列表上的命令

在 Linux 中循环执行参数列表上的命令

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

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

    $some_command
    文件名1
    文件名2
    文件名3
    ...
    文件名N

我想用 创建具有这些文件名的文件touch。我怎样才能循环touch遍历这些名称?

答案1

我只在非常简单的情况下使用 for...do...done。

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

command | sed 's/^/touch /'

这不执行任何操作,只是打印预期的命令。查看结果,然后执行相同的操作sh -x-x标志用于调试):

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

答案2

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

$some_command | xargs -n 1 touch

然而,对于接受多个参数的 touch

touch `$some_command` 

也许对你有用。

答案3

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

答案4

“some_command | xargs touch” 可能会起到作用,但是有两个陷阱:

  1. 如果文件名包含任何空格字符,它将被视为分隔符,例如,文件名“fuh bar”将被“触摸”为名为“fuh”的文件和另一个名为“bar”的文件,而不是单个“fuh bar”。为了缓解这种情况,您可以检查“some_command”是否能够生成另一个分隔符,通常是 NULL(请参阅命令“find”中的“-print0”参数合法性),并使用 xargs 的“--null”参数
  2. 如果命令没有产生任何结果,xargs 将失败。使用其“--no-run-if-empty”参数

相关内容