我试图让 ps aux 命令只列出真正的 ssh-agent 进程。我注意到在某些发行版上,我出现了不需要的进程,例如命令颜色等。我需要这样做,因为我需要确保真正的 ssh-agent 进程在脚本中运行(不用麻烦,我已经有一个循环...)。
所以我发现我需要在我的测试例程中使用类似的东西:
#!/bin/bash
ps aux | grep ssh-agent | grep -v grep | awk '{print $12}'
我的问题是:awk $12 是否可以在使用任何 bash 版本的 bash 的任何 unix/linux 环境上运行?
此外,如果我删除“grep -v grep”并执行此操作:
ps aux | grep ssh-agent | awk '{print $12}'
输出是:
ssh-agent
ssh-agent
现在:
ps aux | grep ssh-agent
输出是:
foo 18153478 0.0 0.0 536 844 - A Apr 25 0:00 ssh-agent
foo 31260886 0.0 0.0 252 264 pts/0 A 22:38:41 0:00 grep ssh-agent
这意味着,“grep ssh-agent”之间的空格被 awk 命令解释为分隔符。有什么可以克服的吗?我已经尝试过使用制表符分隔符,但事实并非如此。命令的分隔符似乎是简单的“空格”字符。是否可以为“ps”命令输出强制使用制表符分隔符?
有什么想法吗?
最佳答案
好吧,我想我找到了,非常简单直接:
ps -e -o pid,comm | grep ssh-agent
工作得很好。
并用 | 改编grep ssh 代理
也由 Martin 建议。感谢大家分享您的经验!
关于Bash 通用 "ps aux"按严格名称处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16472509/