如何解决存储“ ps -ax”的结果,以便以后对其进行迭代
当我这样做
ps -ax|grep myApp
我得到一行带有PID和我的应用程序的东西。
现在,我喜欢处理ps -ax的整个结果(没有grep,所以是完整输出):
要么将其存储在变量中,然后在其后进行grep
或在for循环中浏览结果,例如像这样:
for a in $(ps -ax)
do
echo $a
done
不幸的是,它会分隔每个空格,而不是像grep那样用换行符分隔。
任何想法,我如何才能完成一个或另一个(来自变量或for循环的grep)?
重要提示::请不要bash,只有POSIX,所以#!/ bin / sh
预先感谢
解决方法
就像上面所说的,而while循环在这里可能会有所帮助。
更有用的一件事是--no-headers
参数,它使ps跳过标题。
或者-甚至更好-指定您需要处理的确切列,例如ps -o pid,command --no-header ax
整个代码看起来像
processes=`ps --no-headers -o pid,command ax`
echo "$processes" | while read pid command; do
echo "we have process with pid $pid and command line $command"
done
此方法的唯一缺点是,while循环中的命令将在子shell中执行,因此,如果需要将一些var导出到父进程,则必须使用进程间通信的东西来完成它。
我通常将结果转储到while循环之前创建的临时文件中,并在循环结束后读取它们。
,我通过在执行命令时删除空格找到了解决方案:
result=$(ps -aux|sed 's/ /_/g')
您还可以通过删除重复的空格来使其更易于过滤:
result=$(ps -aux| tr -s ' '|sed 's/ /_/g')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。