假设我们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