Bash输出到文件没有新行

时间:2017-04-20 07:50:29

标签: linux bash

我现在陷入困境,需要一些帮助。我正在运行以下命令:

echo  $(ps aux |sort -nrk 3,3 | head -n 10) > text.txt

我得到的输出都在一个大块中

student 2066 16.5 7.4 1609208 299500 ? Ssl 07:31 12:16 compiz student 2803 13.3 8.3 2261736 339840 ? Sl 07:33 9:40 /usr/lib/firefox/plugin-container -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 2720 true tab student 2720 6.5 9.1 2435552 370424 ? Sl 07:33 4:47 /usr/lib/firefox/firefox root 884 5.3 2.8 365268 116248 tty7 Ssl+ 07:31 4:02 /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch student 2700 0.6 1.1 801556 46540 ? Sl 07:33 0:26 /usr/bin/gedit --gapplication-service student 2023 0.1 3.4 1312876 138932 ? Sl 07:31 0:05 /usr/bin/gnome-software --gapplication-service student 2017 0.1 1.3 832524 55068 ? Sl 07:31 0:04 nautilus -n student 1337 0.1 0.0 116164 2084 ? Sl 07:31 0:07 /usr/bin/VBoxClient --draganddrop whoopsie 592 0.0 0.3 373952 12352 ? Ssl 07:30 0:00 /usr/bin/whoopsie -f USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

我想知道是否有线逐行输出。

student 2066 16.5 7.4 1609208 299500 ? Ssl 07:31 12:16 compiz 
student 2803 13.3 8.3 2261736 339840 ? Sl 07:33 9:40 /usr/lib/firefox/plugin-container -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 2720 true tab 
student 2720 6.5 9.1 2435552 370424 ? Sl 07:33 4:47 /usr/lib/firefox/firefox root 884 5.3 2.8 365268 116248 tty7 Ssl+ 07:31 4:02 /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch student 2700 0.6 1.1 801556 46540 ? Sl 07:33 0:26 /usr/bin/gedit --gapplication-service student 2023 0.1 3.4 1312876 138932 ? Sl 07:31 0:05 /usr/bin/gnome-software --gapplication-service student 2017 0.1 1.3 832524 55068 ? Sl 07:31 0:04 nautilus -n 
student 1337 0.1 0.0 116164 2084 ? Sl 07:31 0:07 /usr/bin/VBoxClient --draganddrop whoopsie 592 0.0 0.3 373952 12352 ? Ssl 07:30 0:00 /usr/bin/whoopsie -f USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

我期待在BASH中这样做,因为我现在正在教自己,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

为什么你必须echo命令替换($(..))输出,当你可以做的时候,

ps aux |sort -nrk 3,3 | head -n 10 > text.txt

答案 1 :(得分:1)

somecmd $(...) 

这是在Bash / POSIX shell脚本中最常见的错误,而不是引用变量扩展或命令替换。

问题与此处相同:

var="foo     bar"             # couple of spaces
echo $var                     

由于未引用$var,因此它会在空格上分割,并且生成的单词将作为echo的单独参数给出。并且echo打印由单个空格分隔的所有参数。在您的示例中,来自命令替换的换行符类似地用于拆分输入。

比较
echo "$var"

并查看:http://mywiki.wooledge.org/WordSplitting以及http://mywiki.wooledge.org/BashPitfalls

中的前两项

当然,命令替换$(...)的作用是获取命令的输出并将其放在另一个命令的命令行上。这与echo的作用完全相反,从命令行获取输入并将其打印到标准输出。因此,您可以直接删除它们并直接重定向ps ...命令的输出。