免费注册 查看新帖 |

Chinaunix

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

[学习共享] 【share】who -m 标准输入重定向后,不能工作的解决方法 [复制链接]

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-23 22:36 |只看该作者 |倒序浏览
本帖最后由 yjh777 于 2015-12-23 22:38 编辑

刚才看帖子( http://bbs.chinaunix.net/thread-4216683-1-1.html )
碰到这个问题,觉得比较有意思 鼓捣半天 终于解决了;

单独发个帖子 share 一下:

问题:
     调用 who -m 的时候,如果调用者stdin被重定向了(读管道或其他文件),
     who -m 就会失效(没有任何输出)。

定位:
     查看man手册,得到线索:
        -m     仅显示 和 stdin 关联 的 主机名 和 用户

尝试解决:
     who -m  </dev/tty     #发现竟然不行
     who -m  <$(tty)          #可以工作,但是:
     ls | tty                            # 同样如果stdin被重定向了 tty 就不能工作了
  1. $ ls | LANG=C tty
  2. not a tty
复制代码
最后,通过在脚本里获取进程组的tty,终于搞定:
  1. $ cat test.sh
  2. #!/bin/bash
  3. tty=$(ps af | grep ^\ $PPID | awk '{print $2}')
  4. who -m </dev/$tty
  5. #-------------------------------------------------------------------
  6. $ ls | sh test.sh
  7. sb      pts/2        2015-12-23 22:35 (10.72.6.201)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP