Я наткнулся на эту проблему, поэтому мне интересно, как это возможно?
Стандартный прогон команды:
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14
info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000017"
sent: 1; skipped: 0; total: 1
Хорошо, давайте попробуем получить только первую строку:
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1
sent: 1; skipped: 0; total: 1
Как насчет стандартной головы?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head
sent: 1; skipped: 0; total: 1
Обратный grep? СЭД? тройник?!?!? !!?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | grep -v pero
sent: 1; skipped: 0; total: 1
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | sed 's/foo/bar/'
sent: 1; skipped: 0; total: 1
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | tee
sent: 1; skipped: 0; total: 1
stderr в стандартный вывод?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 2>&1 | tee
sent: 1; skipped: 0; total: 1
Я действительно озадачен ...
tee
? Что произойдет, если вы бежитеzabix_sender <options> 2>&1 | head -1
?Ответы:
Это может произойти, если приложение пишет непосредственно в TTY вместо STDOUT или STDERR.
Вы можете поиграть с этим поведением, сравнив 2 примера ниже
Обратите внимание, что первый ничего не показывает, а второй показывает. Это потому, что мы отправили вывод напрямую в tty и обошли перенаправление на
/dev/null
.Вы можете обойти такие вещи, используя
script
В основном
script
утилита создает поддельный tty и запускает команду в этом tty. Любые выходные данные команды отправляются в STDOUT, который затем можно перенаправить в обычном режиме.источник
script: illegal option -- c
:( Есть ли какие-нибудь другие обходные пути, о которых вы знаете?