@@ -11,11 +11,11 @@ __tp_mem_used_info() {
1111 local mem_total_bytes
1212 local mem_used_bytes
1313
14- stats=$( vm_stat)
14+ stats=$( vm_stat | tr ' \n ' ' ' )
1515 bytes_per_page=$( echo " $stats " | sed -e ' s/.*page size of \([0-9]*\).*/\1/' )
1616 mem_total_bytes=$( sysctl hw.memsize | sed -e ' s/^hw.memsize: \([0-9*]\)/\1/' )
17- free_pages=$( echo " $stats " | sed -e ' s/.*Pages free: \([0-9]*\).*/\1/' )
18- external_pages=$( echo " $stats " | sed -e ' s/.*File-backed pages: \([0-9]*\).*/\1/' )
17+ free_pages=$( echo " $stats " | sed -e ' s/.*Pages free: * \([0-9]*\).*/\1/' )
18+ external_pages=$( echo " $stats " | sed -e ' s/.*File-backed pages: * \([0-9]*\).*/\1/' )
1919 mem_used_bytes=$( echo " $mem_total_bytes - ($free_pages + $external_pages ) * $bytes_per_page " | bc -l)
2020
2121 echo " $mem_used_bytes " " $mem_total_bytes "
@@ -31,14 +31,14 @@ __tp_mem_used_info() {
3131 local s_reclaimable
3232 local mem_used_bytes
3333
34- meminfo=$( cat /proc/meminfo)
35- mem_total=$( echo " $meminfo " | sed -e ' s/^MemTotal: \([0-9]*\).*/\1/' )
34+ meminfo=$( cat /proc/meminfo | tr ' \n ' ' ' )
35+ mem_total=$( echo " $meminfo " | sed -e ' s/^MemTotal: * \([0-9]*\).*/\1/' )
3636 mem_total_bytes=$( echo " $mem_total * 1024" | bc -l)
37- mem_free=$( echo " $meminfo " | sed -e ' s/.* MemFree: \([0-9]*\).*/\1/' )
38- shmem=$( echo " $meminfo " | sed -e ' s/.* Shmem: \([0-9]*\).*/\1/' )
39- buffers=$( echo " $meminfo " | sed -e ' s/.* Buffers: \([0-9]*\).*/\1/' )
40- cached=$( echo " $meminfo " | sed -e ' s/.* Cached: \([0-9]*\).*/\1/' )
41- s_reclaimable=$( echo " $meminfo " | sed -e ' s/.* SReclaimable: \([0-9]*\).*/\1/' )
37+ mem_free=$( echo " $meminfo " | sed -e ' s/.* MemFree: * \([0-9]*\).*/\1/' )
38+ shmem=$( echo " $meminfo " | sed -e ' s/.* Shmem: * \([0-9]*\).*/\1/' )
39+ buffers=$( echo " $meminfo " | sed -e ' s/.* Buffers: * \([0-9]*\).*/\1/' )
40+ cached=$( echo " $meminfo " | sed -e ' s/.* Cached: * \([0-9]*\).*/\1/' )
41+ s_reclaimable=$( echo " $meminfo " | sed -e ' s/.* SReclaimable: * \([0-9]*\).*/\1/' )
4242 mem_used_bytes=$( echo " ($mem_total - $mem_free + $shmem - $buffers - $cached - $s_reclaimable ) * 1024" | bc -l)
4343
4444 echo " $mem_used_bytes " " $mem_total_bytes "
@@ -47,16 +47,27 @@ __tp_mem_used_info() {
4747
4848tp_mem_used_gigabytes () {
4949 read -r mem_used_bytes mem_total_bytes < <( __tp_mem_used_info)
50- echo " $mem_used_bytes / 1073741824" | bc -l
50+ __round " $( echo " $mem_used_bytes / 1073741824" | bc -l) " 2
5151}
5252
5353tp_mem_used_megabytes () {
5454 read -r mem_used_bytes mem_total_bytes < <( __tp_mem_used_info)
55- echo " $mem_used_bytes / 1048576" | bc -l
55+ __round " $( echo " $mem_used_bytes / 1048576" | bc -l) " 0
5656}
5757
5858tp_mem_used_percentage_at_least () {
59+ local threshold_percentage=" $1 "
5960 read -r mem_used_bytes mem_total_bytes < <( __tp_mem_used_info)
60- echo " ($mem_used_bytes / $mem_total_bytes ) * 100 >= $1 " | bc -l
61+ echo " ($mem_used_bytes / $mem_total_bytes ) * 100 >= $threshold_percentage " | bc -l
6162}
6263
64+ # source https://askubuntu.com/a/179949
65+ # Rounds positive numbers up to the number of digits to the right of the decimal point.
66+ # Example: "__round 1.2345 3" -> "((1000 * 1.2345) + 0.5) / 1000" -> "1.235"
67+ __round () {
68+ local number=" $1 "
69+ local digits=" $2 "
70+
71+ env printf " %.${digits} f" " $( echo " scale=${digits} ;(((10^${digits} )*${number} )+0.5)/(10^${digits} )" | bc) "
72+ };
73+
0 commit comments