我有一个剧本。myScript
。
它需要两个参数。myScript arg1 arg2
。
假设我有三组论点。
argA1 argB1
argA2 argB2
argA3 argB3
有没有办法将每一行通过管道传输到 myScript.我愿意在文件中包含一组参数,也许可以使用 xargs。不确定要调查什么。
所以我会运行像下面的假示例这样的命令:
cat myFile | xargs > myScript
不需要另一个脚本,只需命令行上的命令。
答案1
只是:
xargs -l1 <myFile myScript
-l1
告诉每个输入行xargs
运行一次,该行上的单词作为单独的参数传递。myScript
1
l
1
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
为空则不运行。