Bash - 过程中的变量

时间:2011-07-22 14:14:04

标签: bash

我写了一个剧本:

旧脚本:

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总是返回。有解决方案吗?我希望必然会产生变量。

3 个答案:

答案 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行)。