免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2294 | 回复: 10
打印 上一主题 下一主题

请教read问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-01 18:39 |只看该作者 |倒序浏览
请问read命令可以通过管道读变量吗?比如

echo 'a b c d'|read -a dd


echo 'asdf'|read ddd

我试了,不成
难道非得把输出定向到一个文件中,然后raad从文件中读变量吗?
下面的命令太罗嗦了
echo 'a b c d e f'>/tmp/dd;read -a dd</tmp/dd;rm -rf /tmp/dd

论坛徽章:
0
2 [报告]
发表于 2005-04-01 18:46 |只看该作者

请教read问题

当然可以,您试了,怎么不成,说清楚

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-04-01 19:39 |只看该作者

请教read问题

http://bbs.chinaunix.net/forum/viewtopic.php?t=237464

论坛徽章:
0
4 [报告]
发表于 2005-04-01 21:23 |只看该作者

请教read问题

原帖由 "whtlly" 发表:
请问read命令可以通过管道读变量吗?比如

echo 'a b c d'|read -a dd


echo 'asdf'|read ddd

我试了,不成
难道非得把输出定向到一个文件中,然后raad从文件中读变量吗?
下面的命令太罗嗦了
echo 'a..........

用管道read本身是成功的,但是读取的值保存在子进程的变量中,调用read的进程中无法获得这些值。

论坛徽章:
0
5 [报告]
发表于 2005-04-02 21:36 |只看该作者

请教read问题

[quote]原帖由 "一梦如是"]当然可以,您试了,怎么不成,说清楚[/quote 发表:

[root@localhost tmp]# echo 'a b c d e'|read -a aaa
[root@localhost tmp]# echo $aaa

[root@localhost tmp]# echo ${aaa[1]}

[root@localhost tmp]# echo ${aaa[0]}

[root@localhost tmp]# read -a bbb
a b c d e
[root@localhost tmp]# echo ${bbb[0]}
a
[root@localhost tmp]# echo ${bbb[1]}
b
[root@localhost tmp]# echo ${bbb[2]}
c
[root@localhost tmp]# echo $bbb
a

论坛徽章:
0
6 [报告]
发表于 2005-04-02 21:37 |只看该作者

请教read问题

[quote]原帖由 "寂寞烈火"]http://bbs.chinaunix.net/forum/viewtopic.php?t=237464[/quote 发表:

上面的帖子看过了

论坛徽章:
0
7 [报告]
发表于 2005-04-02 21:43 |只看该作者

请教read问题

aerofox   不是解释过了,read的变量在其子进程中才能使用

论坛徽章:
0
8 [报告]
发表于 2005-04-02 21:43 |只看该作者

请教read问题

原帖由 "aerofox" 发表:

用管道read本身是成功的,但是读取的值保存在子进程的变量中,调用read的进程中无法获得这些值。


没明白您的意思,我是在命令行中执行
echo 'a b c'|read -a ddd
上面的命令并没有用()括起来,也没有放到脚本中,为什么无法获得这些值?

论坛徽章:
0
9 [报告]
发表于 2005-04-02 21:58 |只看该作者

请教read问题

你用管道这样执行read,就会产生一个子进程的,所有你如果要用此变量就要在此子进程中用,如

  1. echo 'a b c'|(read -a ddd;echo ${ddd[0]},${ddd[1]},${ddd[2]})

  2. a,b,c

复制代码

论坛徽章:
0
10 [报告]
发表于 2005-04-02 22:09 |只看该作者

请教read问题

刚才做了个试验,终于明白了
  1. [root@localhost subsys]# (sleep 100;echo asd)|read ddd&
  2. [1] 1273
  3. [root@localhost subsys]# pstree -p
  4. init(1)-+-bdflush(11)
  5.         |-crond(569)
  6.         |-keventd(4)
  7.         |-khubd(88)
  8.         |-kjournald(24)
  9.         |-kjournald(177)
  10.         |-kjournald(178)
  11.         |-kjournald(191)
  12.         |-kjournald(195)
  13.         |-kjournald(196)
  14.         |-klogd(538)
  15.         |-kscand/DMA(8)
  16.         |-kscand/HighMem(10)
  17.         |-kscand/Normal(9)
  18.         |-ksoftirqd_CPU0(5)
  19.         |-ksoftirqd_CPU1(6)
  20.         |-kswapd(7)
  21.         |-kupdated(12)
  22.         |-mdrecoveryd(13)
  23.         |-mingetty(575)
  24.         |-mingetty(576)
  25.         |-mingetty(577)
  26.         |-mingetty(578)
  27.         |-mingetty(579)
  28.         |-mingetty(580)
  29.         |-scsi_eh_0(19)
  30.         |-scsi_eh_1(20)
  31.         |-sshd(559)---sshd(581)---bash(582)---su(611)---bash(612)-+-bash(1272)---sleep(1274)
  32.         |                                                         |-bash(1273)
  33.         |                                                         `-pstree(1276)
  34.         `-syslogd(534)
复制代码


开始以为read是内部命令,根本不涉及到child process,做过上面的试验才知道,管道右边的read,是在sub-shell中执行的。

读了 lightspeed   的Shell 经典问题之 [ I/O 重定向] [1]  
http://bbs.chinaunix.net/forum/viewtopic.php?t=446947&show_type=&postdays=0&postorder=asc&start=0

有个疑问,管道可以由子进程向父传递数据吗?


另外,sub-shell中的变量,父进程怎么才能使用?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP