/ / Różne zachowanie w bashu podczas drukowania danych wyjściowych z polecenia w porównaniu z zakodowanym ciągiem - linux, bash, pipe, tmux

Różne zachowanie w bashu podczas drukowania danych wyjściowych z polecenia w porównaniu do zakodowanego ciągu - linux, bash, pipe, tmux

Próbuję użyć tmux i prostych skryptów bashowych, aby uzyskać bardzo prosty pasek stanu w moich terminalach - więc okna są bardzo małe (1 lub 2 linie wysokości i potencjalnie mniej niż 10 znaków szerokości).

Polecenie powodujące dziwne zachowanie to:

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

który ma po prostu wydrukować coś takiego 1.8%. W terminalu o normalnym rozmiarze (z lub bez tmux) działa dobrze, ale kiedy zmniejszam terminal, w pewnym momencie zaczyna odcinać liczbę i wyświetla tylko %. To może nie wydawać się zbyt dziwne, ale kiedy umieszczę jakiś tekst wokół tego polecenia, jak

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

dostaję abcd jako wyjście podczas zmniejszania terminalu. Więc to ma wpływ tylko na część $(...) to zostaje odcięte.

Również gdy drukuję dwie linie:

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

to się wydrukuje 20.5% dobrze, nawet rozbij go na kilka linii

2
0
.
5
%

zamiast po prostu nie drukować jego części. Pierwsza linia pokazuje jednak tylko % bez żadnej liczby.

Jakiś pomysł, co to powoduje i jak uzyskać liczby do wyświetlenia?

Odpowiedzi:

0 dla odpowiedzi № 1

Domyślnie, top sprawdza rozmiar terminala i dostosowuje jego wyjście na podstawie tego, nawet gdy jest używany w trybie wsadowym, a wyjście jest przesyłane strumieniowo zamiast do terminala. Możesz użyć -w opcja zastąpienia tego.

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