J'essaye d'envoyer la sortie d'une command à notre syslog et c'est ce que j'ai jusqu'à présent.
#!/bin/bash log() { logger -s -t $(basename $0) "$@" } /bin/echo "test" 2>&1 | (log)
et cela fonctionne parfaitement!
[root@server bin]# sh /var/tmp/script.sh script.sh: test
Cependant lorsque j'essaie d'append une string au début du message de journal, il ne fonctionne pas!
#!/bin/bash log() { logger -s -t $(basename $0) "DEBUG: $@" } /bin/echo "test" 2>&1 | (log)
C'est la sortie
[root@server bin]# sh /var/tmp/script.sh script.sh: DEBUG:
Comment puis-je décompresser la variable $ @ / $ * et append un préfixe au message de log sans perdre le stdout de la command d'origine?
C'est le comportement documenté:
message
Ecrivez ce message dans le journal; si elle n'est pas spécifiée, et que l'
-f
n'est pas fournie, l'input standard est consignée.
Heureusement, vous pouvez append les informations nécessaires à l'input standard de l'enregistreur:
log() { { printf "DEBUG: $@" # Prepends the prefix. cat # Outputs the original input. } | logger -s -t $(basename $0) }
Passer des arguments à une fonction qui peut être utilisée comme $1
ou $@
n'est pas la même chose que la lecture de stdin
.
Vous devrez d'abord récupérer datatables de stdin
. Ce qui suit peut ne pas être la solution idéale, mais vous donne un indice:
#!/bin/bash log() { read INPUT logger -s -t $(basename $0) "DEBUG: $INPUT" } echo "test" | (log)