Рассмотрим следующий сценарий:
#!/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
к вызову ...)