Wie wird ein Leerzeichen im Datumsformat-Abschnitt der Anmerkungsausgabe verwendet?

2431
Vajk Hermecz

Ich versuche, annotate-output (Teil des Pakets devscripts) zu verwenden, um den Ausgaben eines Skripts das Datum und einige zusätzliche Informationen voranzustellen. Der erste Parameter kann eine Formatzeichenfolge sein, die an das Datum übergeben wurde. Ich möchte ein Leerzeichen in diese Formatzeichenfolge einschließen. Da ich jedoch ein Neuling bin, habe ich keine Ahnung, wie das Leerzeichen ausgeblendet werden kann, damit es ordnungsgemäß an den Server gesendet wird. Habe eine Menge Optionen ausprobiert, aber egal, was ich anbiete, sys isst es einfach ...

Quelle der Anmerkungsausgabe finden Sie HIER .

user@host:/home/user$ annotate-output '+myscript: %H:%M:%S' echo "A" date: extra operand `%H:%M:%S' Try `date --help' for more information. I: Started echo A date: extra operand `%H:%M:%S' Try `date --help' for more information. O: A date: extra operand `%H:%M:%S' Try `date --help' for more information. I: Finished with exitcode 0 

Erwartete Ausgabe:

myscript: 14:04:16 I: Started echo A myscript: 14:04:16 O: A myscript: 14:04:16 I: Finished with exitcode 0 
1

2 Antworten auf die Frage

1
glenn jackman

Leider hat dieses Skript einige Probleme mit Zitaten. Es wird funktionieren, wenn Sie dem Code diese Funktion hinzufügen:

date () { command date "$*" } 

Eigentlich müssen Sie die Quelle nicht ändern. Tun Sie dies: Definieren Sie die Funktion "Datum" und exportieren Sie sie:

$ date() { command date "$*"; } $ export -f date $ annotate-output "+foo %T" bash -c "echo stdout; echo stderr >&2" foo 10:38:30 I: Started bash -c echo stdout; echo stderr >&2 foo 10:38:30 E: stderr foo 10:38:30 O: stdout foo 10:38:30 I: Finished with exitcode 0 

Es kann Probleme geben, wenn die Sache, die Sie kommentieren, auch Anrufe annimmt date.


Wenn Sie die Annotate-Ausgabe in Ihrem System korrigieren möchten, wenden Sie diesen Unterschied an

$ diff /usr/bin/annotate-output bin/annotate-output  28c28 < echo "`date $` $1: $line" --- > printf "%s %s: %s\n" "$(date "$FMT")" "$1" "$line" 78c78 < echo "`date $` I: Started $@" --- > addtime I <<< "Started $*" 83c83 < echo "`date $` I: Finished with exitcode $EXIT" --- > addtime I <<< "Finished with exitcode $EXIT" 
Ich bin auf der Suche nach einem Fehlerbericht ... glenn jackman vor 10 Jahren 0
Gibt es einen Grund, warum Sie das Befehlsdatum "$ *" anstelle des Befehlsdatums "$ @" gewählt haben? Nur neugierig, da ich festgestellt habe, dass Zitierprobleme bei Verwendung von $ @ tendenziell geringer sind. Wally vor 10 Jahren 0
`" $ @ "` ist, wenn Sie die Argumente an ein anderes Programm übergeben möchten, während der innere Leerraum erhalten bleibt. `" $ * "` ist, wenn Sie alle Argumente als eine einzige Zeichenfolge zusammenfügen möchten. Dies ist, was wir hier tun. glenn jackman vor 10 Jahren 1
1
webKnjaZ

Es funktioniert, wenn Sie den Parameter richtig angeben:

annotate-output '+"myscript: %H:%M:%S"' echo "A" 

dateDas Formatargument des Befehls beginnt mit +. Stimmt. Aber um Platz zu schaffen, sollten Sie alle Zeichen +mit Anführungszeichen umschließen . Andernfalls akzeptiert er Symbole, die dem Leerzeichen folgen, als zweites Befehlszeilenargument.

Yup, obwohl mein Beispiel völlig nicht richtig entkam, habe ich diese Version ausprobiert und die Anmerkungsausgabe gebrochen. Hast du es versucht? Wenn ja, können Sie einige Details zur verwendeten Annotate-Ausgabe angeben? Vielen Dank Vajk Hermecz vor 10 Jahren 0