1
我正在嘗試創建一個等待複製作業完成的while循環。要獲得正在運行的作業的狀態,我正在使用: 作業-l | grep -c「正在運行」作業-l命令需要運行兩次才能更新?
我已將其簡化爲以下代碼。作業完成後,將打印出「成功執行的命令」。我看到的是工作完成,但while循環總是做一個額外的循環。
#!/usr/bin/ksh
execCmd()
{
$*
if [ $? -ne 0 ]
then
exit
else
echo "successfully executed command: \"$*\""
fi
}
execCmd "sleep 10"&
NPROC=`jobs -l | grep -c "Running"`
while [[ $NPROC != "0" ]]; do
echo "$NPROC copy script is still working..."
sleep 2
NPROC=`jobs -l | grep -c "Running"`
echo $NPROC
done
我已經找到了解決這個問題的唯一方法是運行兩次jobs -l
命令,e.g:
jobs -l
NPROC=`jobs -l | grep -c "Running"`
爲什麼工作-l沒有得到直接離開,當我execCmd函數完成更新?
我意識到這看起來很愚蠢,但我大量簡化了腳本。想象一下,睡眠命令是一個真正的過程。我將它分開的原因是因爲最終目標是同時運行一些這些命令。 – gmate2008
我不會延遲十秒,然後假設它已經工作。總的來說,它會留在while循環中,直到所有的工作都完成了,即使它們花的時間比預期的要長。如果你真的運行上面的代碼,你會看到命令完成(當它打印出「成功執行的命令:」,然後while循環將打印出一個額外的「複製腳本仍在工作...」。 – gmate2008