捕获函数的输出,但让它退出

捕获函数的输出,但让它退出

假设我们fct这样定义:

fct() {
  echo words
  read -n1 x
  [ $x == q ] && exit
}

调用fct按预期工作,但如果您需要捕获其输出,var=`fct`,exit则不起作用。根据我在网上搜索的内容,exit可行,但它退出了生成的外壳。它确实可以与 一起使用kill -s KILL $$,因此fct与 运行在同一进程中=,只是上下文不同,并且exit仅退出上下文,而不退出 shell。

有没有一种方法可以调用fct来捕获其输出并让exit退出与 equal 相同的上下文?或者除了硬杀之外还有其他方法可以阻止该进程吗?

答案1

我想到了!

我们可以通过临时文件传递流!在linux中,我们可以通过一个文件来传递它/dev/shm,这样数据就保留在内存中。我们还可以将它包装在一个函数中:

get_output() {
  $1 > /dev/shm/bash_pipe
  eval $2=`cat /dev/shm/bash_pipe`
  rm /dev/shm/bash_pipe
}

然后我们可以像这样使用它:并且您可以使用withget_output fct var的输出。fct$var

相关内容