Оказывается, все, что мне нужно было сделать, это использовать весь стандартный ввод в начале моего скрипта... Я не хочу, чтобы он обрабатывал стандартный ввод по мере его получения, а только когда завершается вся предыдущая команда в цепочке конвейеров.
Итак, мой say_and_pass
скрипт просто такой, который работает для моего варианта использования!
#!/usr/bin/env bash
OUT=$(cat -)
MSG="$*"
say "$MSG"
echo "$OUT"
Решил. Оказывается, у моего мастера кукол есть старый файл ius.repo, который загружался в клиент кукол каждый раз, когда я запускал «puppet agent -t». Затем был использован этот старый файл ius.repo, что вызвало проблемы.