2016-08-11 4 views
0

カラーシェルスクリプト内のテキストの印刷スペース

予想される出力は次のようになります。

desired output of my load.sh script

私のシェルスクリプトは、これまでのところ、このようになります::私は2つの別々の問題に遭遇してい

# Determine CPU load 
pcpu=$(ps -Ao pcpu | awk '{sum = sum + $1}END{print sum}') 

# Determine MEM load 
mem=$(ps -Ao rss | awk '{sum = sum + $1}END{print sum}') 

# Determine total MEM 
tmem=$(cat /proc/info | awk '/MemTotal/ {print $2}') 

# Helper function to convert KB to KB/MB/GB/TB 
pretty_print() { 
    # We start with KB from /proc/meminfo and ps 
    [ $1 -lt 16384 ] && echo "${KB} K" && return 
    MB=$((($1+512)/1024)) 
    [ $MB -lt 16384 ] && echo "${KB} M" && return 
    GB=$((($MG+512)/1024)) 
    [ $GB -lt 16384 ] && echo "${KB} G" && return 
    TB=$((($GB+512)/1024)) 
    [ $TB -lt 16384 ] && echo "${KB} T" && return 
} 

# Helper function to print bars for percentages 
print_bars() { 
    local GREEN='\033[32m' 
    local YELLOW='\033[33m' 
    local RED='\033[31m' 
    local RESET='\033[0m' 
    local current=$(($1*10/$2)) 
    local bars=0 
    while [ $current -gt 0 ]; do 
    [ $bars -lt 3 ] && echo $GREEN 
    [ $bars -gt 2 ] && echo $YELLOW 
    [ $bars -gt 5 ] && echo $RED 
    echo '|' 
    current=$(($current - 1)) 
    bars=$((bars + 1)) 
    done 
    echo $RESET 
    while [ $bars -lt 10 ]; do 
    echo ' ' 
    bars=$((bars + 1)) 
    done 
} 

# Output: CPU $pcpu [||| ] - MEM $mem/$tmem [||| ] 
echo CPU $pcpu \[$(print_bars $pcpu 100)\] - MEM $(human_print $mem)/$(human_print $tmem) \[$(print_bars $mem $tmem)\] 
  1. すべての終了スペースは、出力print_barsから削除されます。カラーコード(\033[Xm)の間にスペースを入れて、私の端末にスペースとして印刷されている:これは、より多くの迷惑と、このポストの理由が[| ]または[|||| ]代わりに、適切な[| ]のと[|||| ]
  2. のようなものを印刷する原因となっていますそのような棒:あなたは余分なスペースを削除単語の分割を防止するprint_barsへの呼び出しの周りに二重引用符を配置する必要があり

enter image description here

+0

を使用する必要がありますか? – Barmar

+0

主に聞いたことがないので、私はそれを調べます – stevendesu

答えて

1

echo $GREEN 

ようなコマンドは、単語分割により空間になる出力、後に改行を追加するため

echo "CPU $pcpu [$(print_bars $pcpu 100)] - MEM $(human_print $mem)/$(human_print $tmem) [$(print_bars $mem $tmem)]" 

カラーコードの周囲のスペースがあります。あなたは `tput`を使用していないのはなぜあなたは

echo -n $GREEN 

または

printf "%s" "$GREEN" 
+0

二重引用符を入れて、 'echo -n'に' echo'を更新しました。ありがとうございました :) – stevendesu

関連する問題