我正在使用下面的代码
record_count=0
task()
{
while read -r record ; do
record_count=$(( record_count + 1 ))
.....
done < $1
}
for i in {1..5}; do
task $i &
done
我如何使用 record_count 从子 shell\child 进程到父 shell\process。我试过,return record_count
但没有用。有没有其他方法可以返回值(如果可能的话,返回多个值)
答案1
“return” 表示退出代码,通常为“0”表示成功,其他表示失败。它必须是小于 256 的整数,因此通常它对于返回此处预期的结果类型没有用。
但是您的子流程可以将其结果生成为文本,然后主流程可以选择捕获这些结果:
record_count=0
task()
{
while read -r record
do
record_count=$(( record_count + 1 ))
done <$1
echo $record_count
}
(
for i in {1..5}
do
task $i &
done
wait
) \
| sort
“等待”确保所有子进程都已完成,然后再继续。
请注意,对于并行进程,无法保证它们以什么顺序完成,因此结果不一定会按照 1、2、3、4、5 的顺序出现。
如果这种随机顺序有问题,程序可以向任务传递一个“键”,然后可以使用该键对输出进行排序。在这种情况下,$i 本身可以作为键,但通常文件的名称不会是简单的整数。
答案2
return record_count
只有当数字介于 0 到 255 之间时,您才能使用并获得正确的结果。并且您应该以这种方式使用返回代码:
for i in {1..5}; do
task $i ; echo $?
done