我正在做一个bash脚本,我正在试图显示未记录的用户进程,这通常是守护进程,为此,在练习中,他们建议我:
要处理命令行,我们将使用允许的cut命令 通过过滤器选择列表的不同列。
我用过:
ps -A | grep -v w
ps -A | grep -v who
ps -A | grep -v $USER
但尝试所有这些选项所有用户的所有进程都打印在输出文件中,我只想要未记录的用户的进程。
感谢您的帮助
谢谢。
答案 0 :(得分:1)
grep -v w
将删除与正则表达式w
匹配的行(这只是包含字符串w
的任何内容)。要运行命令 w
,您必须这样说;但正如说明书中暗示的那样,您还需要使用cut
对输出进行后期处理。
为了不完全给出答案,这是粗略的伪代码。
w | cut something >tempfile
ps -A | grep -Fvf tempfile
如果您可以在管道中传递w
的后处理结果,那会很好,但标准输入已经绑定到ps -A
。如果你有一个支持process substitution的shell,你可以使用它。
ps -A | grep -Fvf <(w | cut something)
不幸的是,w
的输出不适合机器读取 - 你也会想要切出标题行。 (在我的机器上,有两个标题行。你可能会有所不同。)你可能会在课程中稍后学习一点Awk,但在那之前,可能会像
ps -A | grep -Fvf <(w | tail -n +3 | cut something)
这仍然无法完全处理所有可能的情况。如果某人的帐户名称为grep
,该怎么办?