Различное поведение в bash при выводе команды на печать по сравнению с жестко закодированной строкой - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь использовать 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
%

, а не просто не печатать его части.Однако в первой строке отображается только % без каких-либо цифр.

Есть идеи, что вызвало это и как заставить отображаться цифры?

1 Ответ

0 голосов
/ 10 мая 2018

По умолчанию top проверяет размер терминала и регулирует его выходной сигнал на основе этого, даже когда используется в пакетном режиме, а выход передается по трубопроводу вместо того, чтобы идти к терминалу.Вы можете использовать опцию -w, чтобы переопределить это.

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