我现在陷入困境,需要一些帮助。我正在运行以下命令:
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中这样做,因为我现在正在教自己,任何帮助都会受到赞赏。
答案 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 ...
命令的输出。