J'ai trébuché sur cette question, alors je me demande comment est-ce possible?
Exécution standard de la commande:
# 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
OK, essayons d'obtenir la première ligne uniquement:
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head -1
sent: 1; skipped: 0; total: 1
Et la tête standard?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 | head
sent: 1; skipped: 0; total: 1
Grep inverse? sed? tee?!?!?!!?
# 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 à stdout?
# zabbix_sender -c zabbix_agentd.conf -k mmysql.QCInserts -o 14 2>&1 | tee
sent: 1; skipped: 0; total: 1
Je suis vraiment perplexe ...
tee
? Que se passe-t-il si vous courezzabix_sender <options> 2>&1 | head -1
?Réponses:
Cela peut se produire si l'application écrit directement sur le TTY au lieu de STDOUT ou STDERR.
Vous pouvez jouer avec ce comportement en comparant les 2 exemples ci-dessous
Remarquez que le premier ne montre rien, mais le second. C'est parce que nous avons envoyé la sortie directement au tty et ignoré la redirection vers
/dev/null
.Vous pouvez contourner ce genre de choses en utilisant
script
Fondamentalement, l'
script
utilitaire crée un faux tty et lance la commande dans ce tty. Toute sortie de la commande est envoyée à STDOUT que vous pouvez ensuite rediriger normalement.la source
script: illegal option -- c
:( Y a-t-il d'autres solutions que vous connaissez?