猿问

与硬编码字符串相比,在打印命令输出时,bash的行为不同

我正在尝试使用tmux和简单的bash脚本在终端中获取非常基本的状态栏-因此窗口很小(高度为1或2行,宽度可能少于10个字符)。


导致异常行为的命令是:


echo "$(top -bn 1 | awk '/^%Cpu/{print $2}')%"

基本上应该只是打印出类似的东西1.8%。在普通大小的终端(带或不带tmux)中,它可以正常工作,但是当我缩小终端时,有时它会切断数字并仅显示%。这似乎不太奇怪,但是当我在此命令周围放一些文字时,例如


echo "ab$(top -bn 1 | awk '/^%Cpu/{print $2}'cd"

abcd缩小终端时得到输出。因此,这仅影响$(...)被切除的零件的枯萎。


另外,当我打印两行时:


echo "$(top -bn 1 | awk '/^%Cpu/{print $2}'%"

echo "20.5%"

它可以20.5%很好地打印,甚至可以分成几行,例如


2

0

.

5

%

而不是只打印其中的一部分。但是,第一行仅显示%没有任何数字。


知道是什么原因造成的,以及如何显示数字?


慕娘9325324
浏览 245回答 1
1回答

长风秋雁

默认情况下,top即使在批处理模式下使用并且输出通过管道传输而不是转到终端时,也要检查终端大小并根据其调整输出。您可以使用该-w选项来覆盖它。echo "$(top -w 50 -bn 1 | awk '/^%Cpu/{print $2}')%"
随时随地看视频慕课网APP
我要回答