Bash - 从下标到父脚本的返回值

use*_*697 29 bash

我有两个Bash脚本.父脚本调用下标来执行某些操作并返回值.如何将下标中的值返回到父脚本?添加return下标并捕获父级中的值不起作用.

cda*_*rke 44

我假设这些脚本在两个不同的进程中运行,即你没有"采购"其中一个.

这取决于你想要返回什么.如果您只想返回0到255之间的退出代码,那么:

# Child (for example: 'child_script')
exit 42
Run Code Online (Sandbox Code Playgroud)
# Parent
child_script
retn_code=$?
Run Code Online (Sandbox Code Playgroud)

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

# Child (for example: 'child_script')
echo "some text value"
Run Code Online (Sandbox Code Playgroud)
# Parent
retn_value=$(child_script)
Run Code Online (Sandbox Code Playgroud)

  • @AakilFernandes:在这种情况下, `echo` 会写入给定的行:示例中的“某些文本值”。然而,父级正在捕获子级的所有标准输出,无论它是否来自“echo”。这可能是由换行符 `$'\n'` 分隔的多行 (3认同)
  • echo方法返回的是子脚本返回的所有内容还是仅返回最后一行? (2认同)

Goi*_*Off 5

这是使用临时文件从子脚本返回文本值的另一种方法。在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
Run Code Online (Sandbox Code Playgroud)

孩子

#!/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
Run Code Online (Sandbox Code Playgroud)