将值列表通过管道传输到 bash 脚本

将值列表通过管道传输到 bash 脚本

我有一个剧本。myScript

它需要两个参数。myScript arg1 arg2

假设我有三组论点。

argA1 argB1
argA2 argB2
argA3 argB3

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

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

cat myFile | xargs > myScript

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

答案1

只是:

xargs -l1 <myFile myScript

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

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

例如,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

xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'

会产生:

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"

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

xargs -l1 -r -a myFile myScript

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

相关内容