Рассмотрим следующий сценарий:
#!/bin/bash
function long_running {
for i in $(seq 1 10); do
echo foo
sleep 100
done
}
long_running | head -n 1
Он производит ожидаемый результат (одна строка «foo»), но засыпает (на указанные 100 секунд) перед завершением. Я бы хотел, чтобы сценарий завершился немедленно, когда это произойдет. Как я могу заставить bash немедленно завершить работу? Даже изменение последней строки на
long_running | (head -n 1; exit)
или подобное не работает; Я не могу заставить работать set -e
, еще одно распространенное предложение, даже если я вызываю сбой, скажем, (head -n 1; false)
или тому подобное.
(Это упрощенная версия моего реального кода (очевидно), который не спит; просто создает довольно сложный набор вложенных конвейеров, ищущих различные решения проблемы ограничения; так как мне нужен только один, и мне все равно что я получаю, я хотел бы иметь возможность завершить сценарий, добавив head -n 1
к вызову ...)