Хочу создать рамку вокруг вывода, для этого использую функцию
msg="# $* #"
что-то вообще не то
как вариант размер можно контролировать через column
MEM="Memory Usage: 277/1983MB (13.97%)"
HDD="Disk Usage: 5/16GB (35%)"
CPU="CPU Load: 0.00"
VAR="$MEM\n$HDD\n$CPU"
banner() {
v="$@"
x=$(echo -e "$v" |awk '{if(length>max)max=length}END{for(i=1;i<max+5;i++){printf "#"}}')
echo "$x"
echo -e "$v" |awk '{print "# "$0" #"}' |column -t -s: -o: |column -t -s'#' -o'#'
echo "$x"
}
banner "$VAR"
вывод
#####################################
# Memory Usage: 277/1983MB (13.97%) #
# Disk Usage : 5/16GB (35%) #
# CPU Load : 0.00 #
#####################################
хотя если есть возможность изначально контролировать вид получение MEM, HDD, CPU то будет проще записать данные через тот же
csv а его вывод уже форматировать соответствующими программами, например
csview
MEM="Memory,277/1983MB,13.97%"
HDD="Disk,5/16GB,35%"
CPU="CPU,0.00,"
echo -e "$MEM\n$HDD\n$CPU" |csview -H --style Reinforced
вывод:
┏────────┬────────────┬────────┓
│ Memory │ 277/1983MB │ 13.97% │
│ Disk │ 5/16GB │ 35% │
│ CPU │ 0.00 │ │
┗────────┴────────────┴────────┛