分页: 1 / 1

父shell和子shell之间怎么通信?

发表于 : 2008-08-16 18:19
xiooli
RT

怎么把子shell的输出传回到父shell?

ps:不要说读文件 :twisted:

发表于 : 2008-08-16 18:22
BigSnake.NET
文件,管道,socket,共享内存。。。

发表于 : 2008-08-16 18:31
xiooli
BigSnake.NET 写了:文件,管道,socket,共享内存。。。
大蛇,麻烦举个例子嘛 :lol:

发表于 : 2008-08-16 18:46
BigSnake.NET
没看到 shell 。。

shell的话不清楚了

发表于 : 2008-08-16 18:52
bones7456
最傻的就用文件嘛~
如果要传递的信息就是几个小数字,还可以用kill信号.

发表于 : 2008-08-16 19:04
muzuiget
变量不行么?

发表于 : 2008-08-16 19:30
chasye
PIPE=/tmp/test.pipe

mkfifo $PIPE

echo "just a test" > $PIPE  #如果不在后面用&, 进程就动在一直等其它进程读$PIPE

cat $PIPE #读取信息

发表于 : 2008-08-16 20:00
xiooli
chasye 写了:PIPE=/tmp/test.pipe

mkfifo $PIPE

echo "just a test" > $PIPE  #如果不在后面用&, 进程就动在一直等其它进程读$PIPE

cat $PIPE #读取信息
我用过这个,我是想弄一个计时器,想随时的取得时间

代码: 全选

timer()
{
	[ -e /tmp/fifo ] || mkfifo /tmp/fifo
	while :;do
		printf '%.2d:%.2d' $(($i/60)) $(($i%60));i=$((i+1))
		sleep 1
	done > /tmp/fifo
}
i=0
timer &
cat /tmp/fifo
,用这种方法的话一旦cat终止了,那么计时也就终止了啊

发表于 : 2008-08-16 20:16
BigSnake.NET
> /tmp/fifo 放到 printf 那行

发表于 : 2008-08-16 20:30
xiooli
BigSnake.NET 写了:> /tmp/fifo 放到 printf 那行
不行,这样的话它时间是cat一次才变一次,不cat就不变

发表于 : 2008-08-16 20:34
BigSnake.NET
xiooli 写了:
BigSnake.NET 写了:> /tmp/fifo 放到 printf 那行
不行,这样的话它时间是cat一次才变一次,不cat就不变
每秒cat一次。。

管道就是这样的,必须两边都有东西才会工作
前面关了就会eof,后面关了就会broken pipe

发表于 : 2008-08-16 20:43
xiooli
BigSnake.NET 写了:
xiooli 写了:
BigSnake.NET 写了:> /tmp/fifo 放到 printf 那行
不行,这样的话它时间是cat一次才变一次,不cat就不变
每秒cat一次。。

管道就是这样的,必须两边都有东西才会工作
前面关了就会eof,后面关了就会broken pipe
晕乎,这样的话我就用另一种方法了。谢谢大家的解答哦 :lol:

发表于 : 2008-08-16 22:22
chasye
这样不如用信号

用trap捕捉,kill 发送

进程1,先把信息写入一文件
然后向进程2,发信号

进程2,收到信号,读取方件信息

基本就这样,把信息传来传去

发表于 : 2008-08-16 22:33
yjcong
chasye 写了:这样不如用信号

用trap捕捉,kill 发送

进程1,先把信息写入一文件
然后向进程2,发信号

进程2,收到信号,读取方件信息

基本就这样,把信息传来传去
lz说了, 不用写文件的方法

发表于 : 2008-08-18 22:02
lonelycorn
export行不行?