Home > OS >  Bash printf value does not show up or is cut off
Bash printf value does not show up or is cut off

Time:05-06

I trying to get a value from a command into a var
and then print it our using printf.

Problem: i got the value in the var but with printf it does not appear
or is cut off.

INFO: In my script im calling redis-cli info memory
and to check whats wrong i tried a call on vmstat -s.

Working vmstat test:

format="%-16s | %-16s"
container_name="some_name"
used_memory=$(vmstat -s | sed -n "s/^\(.*\) K used memory.*$/\1/p")
row=$(printf "${format}" "${container_name}" "${used_memory}")
echo "${row}"

Output: some_name | 11841548

The actual script that is not working:

format="%-50s | %-16s"
container_name="totally_secret_container_name_1"
used_memory=$(docker exec -it "${container_name}" redis-cli info memory | sed -n "s/^used_memory_human:\(.*\)$/\1/p")
row=$(printf "${format}" "${container_name}" "${used_memory}")
echo "${row}"

Output: ecret_container_name_1 | 1.08M

Weird is than when i set the format to format="%-50s | %-1s"
then it works - the container name (left value) gets printed correctly.

What happen here?
How can i fix this?

Thanks for your time!

CodePudding user response:

You need to remove the \r characters in the output that are causing it to go back to the beginning of the line and overwrite.

used_memory=$(docker exec -it "${container_name}" redis-cli info memory | sed -n "s/^used_memory_human:\(.*\)$/\1/p")
used_memory=${used_memory//$'\r'/}
row=$(printf "${format}" "${container_name}" "${used_memory}")

This uses the bash ${variable//old/new} replacement operator.

  • Related