在另一个脚本中使用脚本的结果

时间:2016-12-23 13:55:45

标签: linux bash

我正在编写一个bash脚本来基本上运行一个已经创建的脚本(即名为list的脚本),然后获取已执行的list脚本的结果并将列出的项添加到另一个脚本中制作的脚本(让我们称之为export)。

将其分解

list localhost

(这将创建一个列表)

0001 
0002
0003 
...

然后我想要列出列出的项目(000100020003)并将它们作为参数添加到另一个脚本(称为export)。然后,这需要与列出的项目一样多次运行。因此,如果列表中有3个项目,export将使用所列项目的名称运行3次。

export 0001
export 0002
export 0003

4 个答案:

答案 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.shfoobar。如果你想将整行作为单个参数传递而不是像`./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