Wie kann ich ein Problem mit Standardfehlern beheben, die die Ausgabe der Uhr vermasseln?

405
jonderry

Ich versuche insbesondere, den folgenden Befehl sowohl für CentOS als auch für Fedora14 auszuführen (dasselbe Problem bei beiden).

watch sudo jmap -heap 31945 

Es gibt jedoch einige Standardfehlerzeilen, die die Ausgabe nach dem Aufruf von jmap mehr als einmal vermasseln:

Attaching to process ID 31945, please wait... Debugger attached successfully. Server compiler detected. JVM version is 14.2-b01 

Diese Zeilen werden entfernt, wenn ich ausgeführt werde:

sudo jmap -heap 31945 2> /dev/null 

Wenn ich jedoch versuche:

watch sudo jmap -heap 31945 2> /dev/null 

dann werden zu viele Zeilen entfernt (viele Zeilen der tatsächlichen Ausgabe werden entfernt).

Warum passiert dies? Gibt es eine Möglichkeit, dies zu beheben?

1

1 Antwort auf die Frage

3
Kromey

Sie möchten jetzt sagen, watchdass die Ausgabe des Befehls, den Sie ausführen, umgeleitet werden soll. Stattdessen leiten Sie die Ausgabe von sich watchselbst um.

Versuche dies: watch 'sudo jmap -heap 31945 2> /dev/null'

Beachten Sie die neuen Anführungszeichen - dies sagt aus watch, dass das gesamte Kommando der Befehl ist, nicht nur das sudo jmap -heap 31945Teil, und ist daher watchimmer noch in der Lage, Standardfehler selbst zu verwenden (was ich vermute, ist die Ursache Ihrer "verlorenen" Zeilen der Ausgabe).

Irgendwelche Vorschläge für Fälle, in denen der Befehl, den ich zur Überwachung übergeben möchte, Zitate enthält? jonderry vor 13 Jahren 0
@jonderry Zwei Optionen: Verwenden Sie verschiedene Anführungszeichen (zB "sehen" etwas "tun Sie etwas" "")) oder entgehen Sie den Anführungszeichen ("sehen" etwas "tun Sie etwas" ""). Kromey vor 13 Jahren 0
Keines dieser Werke funktioniert für mich. Zum Beispiel, wenn ich `ps -ef | awk -F '' '' `, ich bekomme die Pids für alle Prozesse. `Watch" ps -ef | awk -F '' ' "" liefert jedoch eine falsche Felderxtraktion und "watch" ps -ef | awk -F \' \ '\' \ ' "` führt zu einem nicht abgeschlossenen Befehl. jonderry vor 13 Jahren 0
@Jonderry Sieht aus, als hätte ich Sie mit dem Fluchtweg der einzelnen Anführungszeichen in die Irre geführt. Das erste Formular, das Sie ausprobiert haben, funktioniert jedoch - nachdem Sie das $ in $ 2 entkommen haben, heißt das: `watch" ps -ef | awk -F '' '' "". Siehe auch diese Seite zum Zitieren und Fluchen in Bash: http://wiki.bash-hackers.org/syntax/quoting Kromey vor 13 Jahren 0