我的第一个问题。希望它是一个好的。
所以我希望创建一个脚本,当我的磁盘达到某种用途时,该脚本会杀死运行arecord
的另一个脚本。 (我应该指出,我不确定我是如何进入那个df
过滤器...只是有点搜索...)我的计划是运行两个脚本(一个记录,一个监控)磁盘使用情况)在单独的screen
s。
我在Raspberry Pi上做这一切,顺便说一句。
所以这是我目前的代码:
#!/bin/bash
DISK=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
until [ $DISK -ge 50 ]
do
sleep 1
done
killall arecord
当我使用起始值(“50”变为“30”左右)时,此代码有效。但它似乎并没有像我想要的那样“监视”我的磁盘。我有点想知道发生了什么:变量DISK只被分配一次,没有定期检查或重新定义。
换句话说,我可能想要 in 我的until
循环中的某些内容“获取”来自df
的磁盘使用情况,对吗?有什么好方法可以解决这个问题?
=
PS我非常有兴趣听听如何将整个脚本的目的整合到运行arecord本身的脚本中,但现在这已经超出了我......还有另外一个问题......
答案 0 :(得分:0)
仅设置DISK
一次,因为它在循环开始之前完成,而不是作为循环过程的一部分完成。
一个简单的解决方法是将磁盘空间的评估结合到实际的while
循环中,例如:
#!/bin/bash
until [ $(df / | awk 'NR==2 {print $5}' | tr -d '%') -ge 50 ] ; do
sleep 1
done
killall arecord
你会注意到我已经对命令做了一些小修改,具体来说:
awk
本身从ps
输出中获取相关行,无需在单独的管道阶段使用grep
。tr
删除单个字符,sed
可以做到这一点,但它有点矫枉过正。