Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
cat foo | sed 's/abra/cadabra/g'set -o pipefail сделать (true | cat) && echo True || echo False, а потом замените true на false. В случае с true будет выведено «True», в случае с false — «False», но без set -o pipefail в обоих случаях будет «True». При этом ни true, ни false ничего не пишут в stdoutfirst-command | (grep "foo" || true) | next-commandgrep root < /etc/passwd | mail -s "Thank you" archive@nsa.gov
grep root < /etc/shadow | mail -s "Thank you" archive@nsa.gov
cat << EOF
blah-blah-blah
EOF
get_file_list() {
# все названия выдуманы, совпадения случайны
find . -name "*.py"
find www
echo run
}
rsync \
-t \
-vv \
--files-from=<(get_file_list) \
. \
$DESTINATION \ PIPESTATUS
An array variable (see Arrays below) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single
command).
Таким образом, bash обрабатывает символ конвейера путем системного вызова pipe() для каждого встретившегося символа ‘|’ и выполняет каждую команду в отдельном процессе с использованием соответствующих файловых дескрипторов в качестве входного и выходного потоков.то есть не
все команды в конвейере работают параллельноа только две, причем вторая ждет вывода от первой. Собственно не совсем асинхронно. Процессы то может запущены и параллельно, но работу они делают последовательно, после получения порции данных на вход. Кажется так?
Спасибо за статью, нашёл в ней то, что искал (почему в конвейере my-cmd | wget -c -i - сначала выполняется первая команда, а потом начинает работать вторая, хотя казалось бы первая команда генерирует достаточный объём строк. Достаточный, но всего несколько килобайт. И, возможно, ещё wget ждёт все данные целиком),
Linux pipes tips & tricks