Macos Bash bc和echo命令

Macos Bash bc和echo命令,macos,bash,echo,bc,Macos,Bash,Echo,Bc,我正在为geektool编写一个小geeklet,当我的Mac上的非活动内存和空闲内存的总和变慢时提醒我。我对bash不是很在行,所以我对最终输出有一个问题(变为空白)。 以下是代码: inMem=$(top -l 1|awk '/PhysMem/ {print $6}'|sed s/M//) | freeMem=$(top -l 1|awk '/PhysMem/ {print $10}'|sed s/M//) | totalMem=$inMem+$freeMem | bc | echo $to

我正在为geektool编写一个小geeklet,当我的Mac上的非活动内存和空闲内存的总和变慢时提醒我。我对bash不是很在行,所以我对最终输出有一个问题(变为空白)。 以下是代码:

inMem=$(top -l 1|awk '/PhysMem/ {print $6}'|sed s/M//) | freeMem=$(top -l 1|awk '/PhysMem/ {print $10}'|sed s/M//) | totalMem=$inMem+$freeMem | bc | echo $totalMem
还想知道我的问题是否是最优的。
非常感谢。

使用
/proc/meminfo
文件,而不是解析
top
。例如,使用:

$ head -2 /proc/meminfo
MemTotal:        4061696 kB
MemFree:          335064 kB
您可以看到总计和释放内存是正确的,但问题是“如何将
/proc/meminfo
输出为变量?”

您可以使用此纯bash解决方案进行解析:

read -d '' _  memTotal _ _ memFree _ < <(head -2 /proc/meminfo)

read-d'\umemtotal\uuumfree\up>我想知道这是否真的可以简化您的命令。我不能测试它,因为我不在OSX上,但我希望它能工作

read inMem freeMem totalMem < <(top -l 1 | awk '/PhysMem/ { i = $6; sub(/M/, "", i); f = $10; sub(/M/, "", f); printf("%d %d %d\n", i, f, i + f); exit; }')
echo "inMem: $inMem"
echo "freeMem: $freeMem"
echo "totalMem: $totalMem"

read-inMem-freem-totalMemfree
命令?@SeanBright:在OSX上没有,最好查询
sysctl-a vm
这里唯一的问题是假设映射到所需变量的位置在不读取它们的名称的情况下是不安全的——未来的内核可能会在添加新值时重新排序。OS X没有/proc/meminfoOSX没有procfs。对于一般方法,+1,虽然如果不需要在shell变量中包含值,它仍然可以简化很多。@tripleee我的初始版本实际上只是命令本身,没有显示
inMem
freeMem
的值,但我无法概括OP真正想要的。哦,我的意思是简单的
top-l 1 | awk'。。。END{print“inMem:”i;print“freeMem:”f;print“totalMem:”i+f}'
非常感谢)echo命令仅用于测试,我只需要totalMem值,因为它显示了可使用的总内存。