ubuntuusers.de

Befehlsausgabe in Array speichern

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

vostro

Anmeldungsdatum:
18. August 2008

Beiträge: 45

Hi,

ich muss bei einem Befehl wie zum Beispiel ps -ax für jede Zeile die pid oder die time auslesen und diese dann als Variable speichern. Damit ich mit beispielsweise der pid einen neuen Befehl aufrufen kann.

Ich habe mir gedacht am Besten müsste das eigentlich mit einem Array gehen, jedoch fehlt mir irgendwie der Ansatz wie ich das lösen kann. Gibt es eine Möglichkeit beim Befehl ps -ax die Ausgabe in ein Array zu speichern. (für jede Zeile ein eignes Element) Auf die entsprechende Stellte könnte ich ja dann mit grep bzw awk kommen.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Zunächst einmal heißt es nicht ps -ax sondern ps ax, weswegen ps am Anfang auch eine Warnung ausgibt. Zweitens ist auch ps ax wahrscheinlich Unsinn, weil man an die benötigten Daten viel einfacher herankommen kann. Beispielsweise kannst Du Dir mit ps -eo pid= -o time= PID und time aller Prozesse anzeigen lassen. Wahrscheinlich wirst Du auch -C verwenden wollen, siehe manpage.

Die Ausgabe dann in ein Array zu schieben ist einfach:

1
2
IFS='
' x=($(ps -eo pid= -o time=))

Wobei beachtet werden muss, dass zwischen den beiden ' keine Zeichen außer dem Zeilenumbruch stehen.

vostro

(Themenstarter)

Anmeldungsdatum:
18. August 2008

Beiträge: 45

ja das mit dem ps war eigentlich auch nur ein Beispiel.

Es geht mir viel mehr darum, wenn ein Script sozusagen eine Tabelle ausgibt, wie ich diese Werte in ein Array speichern kann, um mit diesen dann weiterarbeiten zu können.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Ja, das habe ich in meinem Posting gerade noch ergänzt.

vostro

(Themenstarter)

Anmeldungsdatum:
18. August 2008

Beiträge: 45

ah dankeschön, das scheint dem was ich will schon sehr nahe zu kommen.

Jedoch kann ich über

1
echo ${IFS[*]}

nichts ausgeben.

Irgendwie steh ich auch etwas auf dem Schlauch was das = ' ' x= bedeutet, bzw was es bewirkt, bzw bewirken sollte. Wär nett wenn du mir das kurz erklären würdest. Ich setzte ungern Befehle ein die ich nicht verstehe. Da ich noch nicht wirklich viel Ahnung von bash-scripting habe, sind mir solche Lernerfolge von großer Bedeutung ☺

edit: ah sry anscheinend ist ja x der Arrayname, aber könntest du mir mal trotzdem kurz erklären was da eig genau passiert?

Sudek

Anmeldungsdatum:
12. August 2009

Beiträge: Zähle...

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Die Shell splittet Wörter an den Zeichen auf, die in der Variablen $IFS [1] enthalten sind. Da wir nur an den Zeilenumbrüchen trennen wollen, müssen wir also den Wert von IFS so setzen, dass nur der Zeilenumbruch enthalten ist. Der Teil mit x=(...) sollte klar sein, das ist einfach eine Array-Zuweisung [2] , und $(...) sollte ebenfalls klar sein, dass ist eine Befehlsersetzung [3] .

@Sudek: Der Thread bringt ihm überhaupt nichts. Da geht es um Programmierung in C, nicht um Shell-Scripte.

//edit: Ceterum Censeo die neue Forensyntax ist der absolute Bockmist. Jetzt wird man von der Syntax gezwungen, Leerzeichen an absolut unpassenden Stellen (nach den Fußnoten) einzusetzen, weil der Parser es sonst nicht kapiert.

Antworten |