我正在编写一个bash脚本来基本上运行一个已经创建的脚本(即名为list
的脚本),然后获取已执行的list
脚本的结果并将列出的项添加到另一个脚本中制作的脚本(让我们称之为export
)。
将其分解
list localhost
(这将创建一个列表)
0001
0002
0003
...
然后我想要列出列出的项目(0001
,0002
,0003
)并将它们作为参数添加到另一个脚本(称为export
)。然后,这需要与列出的项目一样多次运行。因此,如果列表中有3个项目,export
将使用所列项目的名称运行3次。
export 0001
export 0002
export 0003
答案 0 :(得分:3)
./list.sh localhost | while read -r item; do ./export.sh "$item"; done
说明:
./list.sh localhost
输出项目read -r item
读取输出的一行并将其保存到变量$item
。 -r
阻止read
扩展输入中的转义序列。以防万一。while
)进行while …; do …; done
循环,以便对所有项目调用export.sh
答案 1 :(得分:2)
除read
循环中的while
命令外,您可以使用xargs:
./list localhost | xargs -L1 ./export.sh
xargs -L1
为每个输出行./export.sh
生成一次./list localhost
次调用。该行将受到分词的影响。这意味着如果./list
输出foo bar
之类的行,xargs
将使用两个参数调用./export.sh
:foo
和bar
。如果你想将整行作为单个参数传递而不是像`./export.sh“foo bar”那么你可以使用换行符号作为分隔符(使用GNU xargs):
./list localhost | xargs -L1 -d '\n' ./export.sh
另一个可移植的选项(感谢mklement0)来控制此行为是使用-I
选项为参数指定占位符并指定它在命令中的使用方式:
# Will call like ./export.sh "foo bar" (quoted as single argument)
./list localhost | xargs -I '{}' ./export.sh {}
答案 2 :(得分:-1)
您可以使用'管道'命令来执行您想要的操作。
list localhost | myscript.sh
这会将'list localhost'的输出结果推送到'myscript.sh'。
答案 3 :(得分:-1)
您可以在命令中使用``来快速完成工作:
for i in `./list localhost`; do ./export $i; done