2017-07-24 7 views
0

Der Versuch, die Prozessliste vor und nach dem Ausführen eines Bash-Skript Tests zu vergleichen. Probleme haben, da ps 1 zurückgibt, und ich bin mir nicht sicher, wie ich das Vorher und Nachher vergleichen soll, wenn ich sie habe.vergleichen Prozessliste vor und nach dem Ausführen Bash

Idealerweise würde es in etwa so aussehen. Verzeihen Sie den rohen Pseudo-Code:

run-tests: 
    ps -x 
    export before=$? 
    # run tests and scripts 
    ps -x 
    export after=$? 
    # compare before and after 

Vorschläge und Ratschläge geschätzt.

+0

Pipe die Ausgabe von ps durch awk, um einen Exit-Code zurückzugeben. –

+0

Wenn Sie sagen, vergleichen Sie sie, meinen Sie testen, ob sie gleich sind, oder eine andere automatische Analyse durchführen, oder legen Sie beide auf dem Bildschirm, oder was? – Beta

Antwort

1

Ich nehme an, Sie möchten die Anzahl der laufenden Prozesse vor und nach (Ihre Frage war nicht klar darüber) zählen. Wenn ja, können Sie Rohr ps in wc:

export before=`ps --no-headers | wc -l` 

- EDIT ---

nachzulesen ich die Frage, und es kann sein, dass Sie für die eigentlichen Prozesse suchen, die sich unterscheiden. Wenn das der Fall ist, dann können Sie die Ausgabe in Variablen erfassen und vergleichen denen:

target: 
    @ before=$$(ps --no-headers); \ 
     run test; \ 
     after=$$(ps --no-headers); \ 
     echo "differing processes:"; \ 
     comm -3 <(echo "$before") <(echo "$after") 

Einige schnelle Anmerkungen gegeben: ich die Linien alle \ ‚s mit verketteten wie Sie erwähnt haben Sie Makefiles verwendet, und die Der Gültigkeitsbereich einer Variablen ist nur die Rezepturzeile, in der sie definiert ist. Durch die Verkettung der Zeilen haben die Variablen einen Umfang des gesamten Rezepts. Ich

verwenden Doppel $$ wie Ihr ursprüngliches Post eine Make-Datei vorgeschlagen, und eine Make-Datei $$ wird zu einem einzigen $ in dem Bash-Code erweitert ausgeführt werden.

var=$(command) in bash Dadurch ordnet var die Ausgabe von command

I die <() Konvention verwendet, die einzuschlagen spezifisch ist. Dadurch können Sie die Ausgabe eines Befehls als Datei behandeln, ohne eine Datei erstellen zu müssen. Beachten Sie, dass ich die Variablen in Anführungszeichen gesetzt habe - dies ist erforderlich, sonst ignoriert die Bash Zeilenumbrüche beim Erweitern der Variablen.

Verwandte Themen