Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 09.11.2007 16:23:52
Hallo,
habe mal eine Frage zur Erstellung von Arrays in der ksh.
Und zwar möchte ich mit der Syntax
ein Array anlegen.
Doch wie muss ich das machen, wenn ich folgenden Befehl habe und dessen Result ins Array schreiben möchte?
Code: Alles auswählen
ssh -q ${machine} "cd ${path}/; find . \( -name $logfile1 -o -name $logfile2 \) -print | xargs tar cvf - "
> ${tmp}/${machine}.tar
Die Ausgabe vom ssh, tar-Befehl sieht ungefähr so aus:
Code: Alles auswählen
a ./logfil1.log 3124K
a ./logs/log1.log 2139K
a ./logs/log2.log 351K
Danke.
Oh, yeah!
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 09.11.2007 17:06:17
Die Arrays in den diversen Shells sind leider nur eindimensional, bei deiner tar-Ausgabe werden jedoch zwei ( möglicherweise relevante ) Werte pro Zeile ausgegeben ( Filepath und Filesize )
wenn du also etwas in der Richtung möchtest:
Code: Alles auswählen
filename[0]=./logfil1.log
filesize[0]=3124K
filename[1]=./logs/log1.log
filesize[1]=2139K
...
dann könnte dir dieser Link weiterhelfen:
http://www.debianforum.de/forum/viewtopic.php?t=86565 ( Beispielscript in meinem zweiten Beitrag )
ansonsten hätte ich gerne genauere Vorgaben
Gruß
gms
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 09.11.2007 17:14:07
Ups,
nein. Eine Zeile soll ein Element des Arrays werden.
Oh, yeah!
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 09.11.2007 18:26:24
nachdem die Ausgabe (stdout) von deinem ssh Kommando in die tar-Datei umgeleitet wird, vermute ich, daß die Liste über stderr ausgegeben wird.
In diesem Fall sollte das ungefähr so funktionieren:
Code: Alles auswählen
IFS='
'
set -A array `ssh -q ${machine} "cd ${path}/; find . \( -name $logfile1 -o -name $logfile2 \) -print | xargs tar cvf - " 2>&1 > ${tmp}/${machine}.tar`
Gruß
gms
-
roli
- Beiträge: 3174
- Registriert: 10.09.2003 17:39:58
Beitrag
von roli » 11.11.2007 14:20:16
Hi,
fuer die Bash gabs vor 8 Monaten einen aehnlichen Thread:
arrays in bashscript vielleicht hilft dir das ja auch.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 11.11.2007 15:53:55
Interessanter Beitrag.
Mal schauen, ob dass ganze auch für die Korn-Shell so gilt.
Oh, yeah!