С ksh/bash/zsh:
{
(./slowprocess.sh >&3 3>&-; echo "$?") |
if read -t 3 status; then
echo "Cool it completed with status $status, do stuff..."
else
echo "It didn't complete, do something else..."
fi
} 3>&1
Мы копируем исходный stdout на fd 3 (3>&1
) таким образом, мы можем восстановить его для slowprocess.sh
(>&3
), в то время как stdout для остальной части (...)
подоболочка переходит к каналу к read -t 3
.
С другой стороны, если Вы хотите использовать timeout
(сюда принятие GNU timeout
):
timeout --foreground 3 sh -c './slowprocess.sh;exit'
избежал бы slowprocess.sh
быть уничтоженным ( ;exit
необходимо для sh
реализации, которые оптимизируют путем выполнения последней команды в процессе оболочки).
Два основных способа сделать это.