将值列表传送到 bash 脚本

pau*_*ulj 4 bash xargs arguments

我有一个脚本。myScript.

它需要两个参数。myScript arg1 arg2.

假设我有三组论点。

argA1 argB1
argA2 argB2
argA3 argB3
Run Code Online (Sandbox Code Playgroud)

有没有办法将每一行通过管道传输到 myScript。我愿意在文件中包含一组 args,也许可以使用 xargs。不确定要调查什么。

所以我会像下面的假例子一样运行命令:

cat myFile | xargs > myScript
Run Code Online (Sandbox Code Playgroud)

不要有另一个脚本,只是命令行上的命令。

Sté*_*las 10

只是:

xargs -l1 <myFile myScript
Run Code Online (Sandbox Code Playgroud)

-l1告诉每个输入的 inexargs运行myScript一次,该1 line 上的单词1 l作为单独的参数传递。

对于xargs,单词用空格分隔,并且您仍然可以通过使用引号在单词中包含空格(甚至换行符)。但是请注意,虽然xargs支持"..."'...'并且\像大多数 shell 一样引用,但它的解析与类 Bourne 的 shell 不同。特别是,在也"..."没有'...'并且只能\转义换行符中没有反斜杠处理。

例如,myFile可以包含:

word1.1 word1.2
"word 2.1" 'word 2.2'
"word'3.1" 'word"3.2'
'word"'"4'1" word\"4\'2
'word '\
5.1 "word "\
5.2
Run Code Online (Sandbox Code Playgroud)

xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'
Run Code Online (Sandbox Code Playgroud)

会产生:

First word: "word1.1", second word: "word1.2"
First word: "word 2.1", second word: "word 2.2"
First word: "word'3.1", second word: "word"3.2"
First word: "word"4'1", second word: "word"4'2"
First word: "word
5.1", second word: "word
5.2"
Run Code Online (Sandbox Code Playgroud)

通过 GNU 实现xargs,您可以将其改进为:

xargs -l1 -r -a myFile myScript
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以单独使用 stdin 并且myScript如果myFile为空则不运行。