所以我试着编写一个脚本来存储/ proc中的进程的cmds。这是我的剧本:
$ re='^[0-9]+$
$ for i in `ls /proc`; do if [[ $i =~ $re ]] ; then cd /proc/$i;cat cmdline >> /home/nisarg/CMD;fi; done
$ above是shell提示符。
我首先设置了一个正则表达式,它有助于检查子目录是否在/ proc中有一个数字名称。例23331.我这样做是因为/ proc中有几个文件和目录对我来说不感兴趣。我只对具有数字名称的目录感兴趣,因为它们包含过程数据。然后我迭代/ proc并且如果(使用正则表达式)我发现目录有一个数字名称,我进入这个目录(使用cd)并将存储在文件cmdline中的值附加到我的主文件夹中名为CMD的文件。 / p>
我的问题是当我在/ home / nisarg中打开CMD文件时,我发现所有cmd都存储在一行中。我一直认为>>
附加到新的一行。不是吗?
如果没有,有什么方法可以将它们存储在新的一行上吗?
答案 0 :(得分:2)
>>
只是附加到文件,它不会添加换行符。问题是cmdline
并不以换行结束。您只需添加echo
即可添加换行符:
(echo ; cat cmdline) >> /home/nisarg/CMD
使用bash
及其extglob
选项很简单:
#! /bin/bash
shopt -s extglob
for c in /proc/+([0-9])/cmdline ; do
echo
cat "$c"
done > ~/CMD