免费注册 查看新帖 |

Chinaunix

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

这个问题比较水,写一个脚本接收管道的输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-16 21:18 |只看该作者 |倒序浏览
我一般写脚本都是后面接管道进行处理
今天突然想到好像一直没有写过脚本或者函数接受管道的输出,一下卡壳了。。。

当然函数里面直接这样是可以的,
  1. function a{
  2. grep root | awk -F: '{print $NF}'
  3. }
  4. cat /etc/passwd | a
复制代码
如果我想写个接收管道输出保存到变量里,然后进行一系列操作之后再输出的函数呢。。。能不能给举个例子,是要用read吗?

论坛徽章:
0
2 [报告]
发表于 2011-05-16 21:29 |只看该作者
回复 1# minora


   
    a () {
        while read line;do
              echo $line
              echo $line| grep a | awk -F: '{print $NF}'
        done
    }
    cat /etc/passwd | a

论坛徽章:
0
3 [报告]
发表于 2011-05-16 21:37 |只看该作者
呃,多谢。。。今天太腿了= =

论坛徽章:
0
4 [报告]
发表于 2011-05-16 21:38 |只看该作者
回复 2# shplpy


    请问怎么能不忽略空格呢?比如某一行开头有空格

论坛徽章:
0
5 [报告]
发表于 2011-05-16 21:44 |只看该作者
回复 4# minora


   没明白你的意思啊

论坛徽章:
0
6 [报告]
发表于 2011-05-16 21:46 |只看该作者
回复 5# shplpy


   
你这样read的话,文件某一行第一个字符是空格,输出的结果就和源文件不一样了,我想保留那个空格

比如
AAA
BBB
CCCCC

论坛徽章:
0
7 [报告]
发表于 2011-05-16 22:03 |只看该作者
回复 6# minora


    那就再把空格加回去……

论坛徽章:
0
8 [报告]
发表于 2011-05-16 22:10 |只看该作者
回复  shplpy


   
你这样read的话,文件某一行第一个字符是空格,输出的结果就和源文件不一样了,我 ...
minora 发表于 2011-05-16 21:46


    read是以$IFS指定的字符做分隔的,默认的是空格、tab和换行,在read执行前预置一下$IFS。
    在while read line;do前加上一行export IFS='\n'即可

论坛徽章:
0
9 [报告]
发表于 2011-05-16 22:16 |只看该作者
回复 8# shplpy

哦,多谢
再多问一句,这些环境变量在哪可以查看到?怎么全部读取

论坛徽章:
0
10 [报告]
发表于 2011-05-16 22:21 |只看该作者
回复 9# minora

IFS    The  Internal  Field  Separator that is used for word splitting after expansion and to split lines
              into words with the read builtin command.  The default value is ‘‘<space><tab><newline>’’.
  1. man bash  
  2. search IFS
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP