在 Linux 中追加新行

Appending on a new line in Linux

所以我正在尝试编写一个脚本,将进程的命令存储在 /proc 中。这是我的脚本:

 $ re='^[0-9]+$
 $ for i in `ls /proc`; do if [[ $i =~ $re ]] ; then cd /proc/$i;cat cmdline >> /home/nisarg/CMD;fi; done 

$上面是shell提示符。

我首先设置了一个正则表达式 re,它可用于检查子目录是否在 /proc 中具有数字名称。示例 23331。我这样做是因为 /proc 中有几个我不感兴趣的文件和目录。我只对具有数字名称的目录感兴趣,因为它们保存过程数据。然后我遍历 /proc,如果(使用正则表达式)我发现一个目录有一个数字名称,我进入这个目录(使用 cd)并将存储在文件 cmdline 中的值附加到我的主文件夹中名为 CMD 的文件。

我的问题是,当我打开 /home/nisarg 中的 CMD 文件时,我发现所有的命令都存储在一行中。我一直认为 >> 附加到一个新行。不是吗?

如果没有,有什么方法可以将它们分别存储在一个新行中吗?

>> 只是附加到一个文件,它不添加换行符。问题是 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