我正在尝试编写一个执行以下操作的小脚本:
到目前为止,它看起来像这样:
#!/bin/bash
TESTPATH="/some/path/"
while true; do
inotifywait -m -e create,delete,moved_from -r "$TESTPATH" && \
echo "DEBUG: Event detected!" && pkill -f /usr/bin/impressive || true && impressive -a 10 -w "$TESTPATH*.pdf"
done
但是我遇到了以下问题:一旦
impressive
第一次启动,它就会永久执行,并且循环被困在第一次迭代中,并且 inotifywait
不会继续监视,直到令人印象深刻为止亲手杀死的。我想在 while
启动后直接跳转到 impressive
循环的下一个迭代,而不是等待它退出。
我尝试在
nohup
调用前面放一个 impressive
,但这导致我的 RAM 一秒钟就满了,我的机器冻结了......
如何解决这个问题?
问题在于,immembly 在前台运行,阻止循环继续。如果你想让循环在启动immembrane后直接继续,你已经在后台启动immembrane了。 您可以通过在命令后添加 & 来做到这一点:
#!/bin/bash
TESTPATH="/some/path/"
while true; do
inotifywait -m -e create,delete,moved_from -r "$TESTPATH" &&
echo "DEBUG: Event detected!" && pkill -f /usr/bin/impressive || true && impressive -a 10 -w "$TESTPATH*.pdf" &
done
您可能想要
impressive
命令异步运行。您知道可以将命令分组在大括号中吗?
#!/bin/bash
TESTPATH="/some/path/"
while true
do
inotifywait -m -e create,delete,moved_from -r "$TESTPATH" && {
echo "DEBUG: Event detected!"
kill %
impressive -a 10 -w "$TESTPATH"*.pdf &
}
done
备注: 我将
kill
限制为上一次迭代的 impressive
过程,并将 glob 移出双引号(以使其扩展)