52

我有两个 Bash 脚本。父脚本调用下标来执行一些操作并返回一个值。如何将值从下标返回到父脚本?在下标中添加 areturn并在父级中捕获值不起作用。

4

3 回答 3

72

我假设这些脚本在两个不同的进程中运行,即您不是“采购”其中一个。

这取决于您要返回的内容。如果您只想返回 0 到 255 之间的退出代码,则:

# Child (for example: 'child_script')
exit 42
# Parent
child_script
retn_code=$?

如果您希望返回文本字符串,则必须通过标准输出(或文件)来执行此操作。有几种捕获方法,最简单的是:

# Child (for example: 'child_script')
echo "some text value"
# Parent
retn_value=$(child_script)
于 2013-05-02T12:56:14.120 回答
2

这是使用临时文件从子脚本返回文本值的另一种方法。在 parent_script 中创建一个 tmp 文件并将其传递给 child_script。我更喜欢这种方式而不是解析脚本的输出

家长

#!/bin/bash
# parent_script
text_from_child_script=`/bin/mktemp`
child_script -l $text_from_child_script
value_from_child=`cat $text_from_child_script`
echo "Child value returned \"$value_from_child\""
rm -f $text_from_child_script
exit 0

孩子

#!/bin/bash
# child_script
# process -l parm for tmp file

while getopts "l:" OPT
do
    case $OPT in
      l) answer_file="${OPTARG}"
         ;;
    esac
done

read -p "What is your name? " name

echo $name > $answer_file

exit 0
于 2019-10-02T17:48:12.373 回答
-3

从下标返回一个值并检查变量 $? 其中包含返回值

于 2013-05-02T12:31:12.023 回答