我得到了一个包含一些脚本参数的文件:
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.sh
和MyScript.sh
都可执行