我写了一个剧本:
旧脚本:
var="$(sleep 5 && echo "Linux is...")" &
sleep 5
echo $var
新脚本:
var="$(cat file | grep Succeeded && kilall cat)" & killer1=$!
(sleep 60; kill $killer1) & killer2=$!
fg 1
kill $killer2
echo $var
Cat文件始终有效。应该返回“... \ n成功\ n ...”。 Echo empty总是返回。有解决方案吗?我希望必然会产生变量。
答案 0 :(得分:1)
当您通过&
终止命令时,shell会在子shell中执行命令。 var
在子shell中设置,而不是原始过程。
答案 1 :(得分:1)
如果您使用&在后台运行它,则它处于单独的过程中,因此您不再需要共享变量。您需要使用IPC(进程间通信)来确保这一点。最容易使用的IPC是管道:
{ sleep 2 && echo 'Linux is ...' ; } |
{
echo 'doing something here in the meantime...'
sleep 1
read var
echo $var
}
答案 2 :(得分:0)
从var的赋值中删除&
(脚本中的第1行)。