如何从`who -u`输出中提取user-x的PID列?
问题记录
背景
在我的机器上执行who -Hu会得到以下输出:
$ who -Hu NAME LINE TIME IDLE PID COMMENT rpi-first-boot-wizard tty7 1970-01-10 11:44 02:31 1204 (:0) user-x tty2 1970-01-07 20:16 00:10 2670 user-x pts/0 4164607823021491175 . 2756 (192.168.203.57)
问题
需要获取user-x对应的PID列内容,也就是2670和2756。
已尝试方案
- 查阅
who的手册页,未找到提取指定列或隐藏列的选项。 - 尝试执行命令:
who -u | grep user-x | tr -s ' ' | cut -d ' ' -f 5,但该命令仅在时间戳为无空格单一数字的行上有效,遇到含空格的日期格式时解析失败。
需求
希望用简单的Bash命令提取这些PID,优先避免使用编程语言解析;若没有合适的Bash方案,再考虑用编程语言实现。
补充信息
这可能是一个“XY问题”——我的实际需求是将指定用户踢出系统,原本计划把提取到的PID传入kill命令,比如执行who -u | grep user-x | tr -s ' ' | cut -d ' ' -f 5 | xargs kill。该命令之前能正常工作,但遇到带空格的特殊日期格式后就失效了。如果有不依赖who获取正确PID的方法也可以接受。
编辑补充
感谢@jhnc的评论,发现pkill -u user-x可以完美解决踢用户的问题,避开了解析who输出的麻烦。不过保留原问题,因为@markp-fuso的回答提供了原问题的解决方案。
内容的提问来源于stack exchange,提问作者nullromo
相关产品推荐
相关产品推荐

