Использование блока кода {} в bash
Мне было интересно, почему блок кода использовался в следующем примере:
possibly_hanging_job & { sleep ${TIMEOUT}; eval 'kill -9 $!' &> /dev/null; }
Это могло бы быть написано так (без использования кода), а именно?
possibly_hanging_job &
sleep ${TIMEOUT}
eval 'kill -9 $!' &> /dev/null
Ответы
Ответ 1
Вставка двух последних команд в фигурные скобки дает понять, что "это не только две дополнительные команды, которые мы запускаем после долгого процесса, который может зависать, они вместо этого являются неотъемлемой частью для правильного его закрытия прежде чем мы перейдем к остальной части оболочки script". Если бы автор написал:
command &
a
b
c
было бы не совсем ясно, что a
и b
являются лишь частью правильного завершения command
. Написав это так:
command & {a; b}
c
автор поясняет, что a
и b
существуют для того, чтобы получить command
полностью законченный и очищенный до фактического следующего шага c
.
Ответ 2
На самом деле мне даже интересно, почему там eval
. Насколько я вижу, это также должно работать без этого.
Относительно вашего фактического вопроса:
Я думаю, что блок кода должен подчеркнуть, что sleep
принадлежит kill
. Но это не нужно. Он также должен работать следующим образом:
possibly_hanging_job & sleep ${TIMEOUT}; kill -9 $! &> /dev/null
Ответ 3
Да, я не вижу причин, чтобы фигурные скобки появлялись здесь.