与硬编码字符串相比,打印命令输出时 bash 中的不同行为
Different behaviour in bash when printing output from command compared to hardcoded string
我正在尝试使用 tmux 和简单的 bash 脚本在我的终端中获得一个非常基本的状态栏 - 所以 windows 非常小(1 或 2 行高度可能小于宽度为 10 个字符)。
导致异常行为的命令是:
echo "$(top -bn 1 | awk '/^%Cpu/{print }')%"
这基本上只是应该打印出类似 1.8%
的内容。
在正常大小的终端(有或没有 tmux)中它工作正常但是当我缩小终端时,在某个时候它开始切断数字并且只显示 %
。这可能看起来不太奇怪,但是当我在这个命令周围放置一些文本时,比如
echo "ab$(top -bn 1 | awk '/^%Cpu/{print }'cd"
我在缩小终端时得到 abcd
作为输出。所以它只影响 $(...)
被切掉的部分。
当我打印两行时:
echo "$(top -bn 1 | awk '/^%Cpu/{print }'%"
echo "20.5%"
它会打印 20.5%
很好,甚至将它分成几行,如
2
0
.
5
%
而不是不打印它的一部分。但是第一行只显示 %
而没有任何数字。
知道是什么原因造成的以及如何显示数字吗?
默认情况下,top
检查终端大小并根据它调整输出,即使在批处理模式下使用并且输出通过管道传输而不是进入终端。您可以使用 -w
选项来覆盖它。
echo "$(top -w 50 -bn 1 | awk '/^%Cpu/{print }')%"
我正在尝试使用 tmux 和简单的 bash 脚本在我的终端中获得一个非常基本的状态栏 - 所以 windows 非常小(1 或 2 行高度可能小于宽度为 10 个字符)。
导致异常行为的命令是:
echo "$(top -bn 1 | awk '/^%Cpu/{print }')%"
这基本上只是应该打印出类似 1.8%
的内容。
在正常大小的终端(有或没有 tmux)中它工作正常但是当我缩小终端时,在某个时候它开始切断数字并且只显示 %
。这可能看起来不太奇怪,但是当我在这个命令周围放置一些文本时,比如
echo "ab$(top -bn 1 | awk '/^%Cpu/{print }'cd"
我在缩小终端时得到 abcd
作为输出。所以它只影响 $(...)
被切掉的部分。
当我打印两行时:
echo "$(top -bn 1 | awk '/^%Cpu/{print }'%"
echo "20.5%"
它会打印 20.5%
很好,甚至将它分成几行,如
2
0
.
5
%
而不是不打印它的一部分。但是第一行只显示 %
而没有任何数字。
知道是什么原因造成的以及如何显示数字吗?
默认情况下,top
检查终端大小并根据它调整输出,即使在批处理模式下使用并且输出通过管道传输而不是进入终端。您可以使用 -w
选项来覆盖它。
echo "$(top -w 50 -bn 1 | awk '/^%Cpu/{print }')%"