多次运行带有参数的命令

多次运行带有参数的命令

我得到了一个包含一些脚本参数的文件:

foo1 a b c
foo2 a b c
foo3 a b c

我需要为此文件中的每一行运行一次脚本,并将该行作为脚本参数传递,因此它应该执行:

./MyScript.sh foo1 a b c
./MyScript.sh foo2 a b c
./MyScript.sh foo3 a b c

如何使用 Bash 实现这一点?

答案1

xargs命令是为运行命令而创建的,其参数从 stdin 读取,它有一个--arg-file参数,允许从文件读取参数。与-L1标志结合,它将逐行读取参数文件,并对每一行执行命令。以下是示例:

$ cat args.txt
one two three
four file six

$ xargs -L1 --arg-file=args.txt echo                       
one two three
four file six

用您的脚本替换echo

或者,您可以随时重定向文件以从 stdin 流读取,xargs如下所示:

$ xargs -L1  echo < args.txt                                                                                             
one two three
four file six

答案2

使用while循环:

#!/bin/bash
while IFS= read -r line; do
   # if the line read is empty 
   # go to the next line. Skips empty lines
   if [ -z "${line}" ]
   then
       continue
   fi
  /path/to/MyScript.sh $line
done < "$1"

然后调用此脚本anything.sh并运行它,如下所示:

anything.sh /path/to/file/with/foo

记住使anything.shMyScript.sh都可执行

相关内容