Autor |
Nachricht |
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Fr 04.11.2005 08:54
Titel [Shellskript] wie String-Inhalte durch Leerzeichen zerlegen? |
|
|
folgendes Problem. Ich hab in einem Shellskript einen String, der durch Leerzeichen getrennt Dateinamen weiterer Shell-Skripte trägt. Diese Shell-Skripte sollen dann ausgeführt werden.
also etwa so
Code: | d="datei1.sh datei2.sh datei3.sh" |
wie krieg ichs jetzt hin, dass die Shell-Skripte ausgeführt werden? mit PHP hätt ich nen explode gemacht, und dann den Array inner Schleife geleert...
|
|
|
|
|
Mac
Dabei seit: 26.08.2005
Ort: Köln
Alter: 62
Geschlecht:
|
Verfasst Fr 04.11.2005 09:00
Titel
|
|
|
war da nich was mit cat?
|
|
|
|
|
Anzeige
|
|
|
sahnemuh
Dabei seit: 19.06.2003
Ort: /dev/null
Alter: 42
Geschlecht:
|
Verfasst Fr 04.11.2005 09:50
Titel
|
|
|
d="sh datei1.sh && datei2.sh && datei3.sh"
Zuletzt bearbeitet von sahnemuh am Fr 04.11.2005 09:50, insgesamt 1-mal bearbeitet
|
|
|
|
|
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Fr 04.11.2005 10:00
Titel
|
|
|
sahnemuh hat geschrieben: | d="sh datei1.sh && datei2.sh && datei3.sh" |
jou. wäre cool, wenn ich den String selber erstellen würde!
aber der string kommt aus der Datenbank:
Code: | d=$(mysql -pPASS -uUSER -DDB --execute="SELECT * FROM shellskripte" | awk '{print $4}') |
das liefert dann eben $d wie von mir beschrieben...
Kurz beschrieben, fallses doch anders besser gehen sollte:
Ich schreib in eine Datenbank die Namen von Shellskripten mit Zeitstempel. Nun soll ein Cron alle paar Minuten die Datenbank auslesen und Skripte mit dem richtigen Zeitstempel ausführen.
Bisher sieht der Aufruf der ganzen Schose so aus:
Code: | #!/bin/sh
# erstmal aktuelle Zeit erfassen
t=$(date +%s)
# dann zwei Minuten addieren
t=`expr $t + 120`
# MySQL-Query absetzen, was in zwei Min. fällig ist
s=$(mysql -pPASS -uUSER -DDB --execute="SELECT * FROM shellskripte WHERE startzeit > $t" | awk '{print $4}')
# hier sollte jetzt einerseits der spaltenname ("shellskript") rausgelöscht werden und
# die Skripte im Verzeichnis /core/ssh/$s ausgeführt werden.
# Sind momentan in der Variablen $s mit Leerzeichen getrennt.
echo $s |
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Fr 04.11.2005 10:06
Titel
|
|
|
Zitat: | war da nich was mit cat? |
ahh... knapp daneben ist auch vorbei...
cut, nicht cat.
du kannst mit cut strings zerlegen. mit der option -d kann man ein anderes trennzeichen als den tabstop (also hier ein leerzeichen) angeben.
Zuletzt bearbeitet von rob am Fr 04.11.2005 10:07, insgesamt 1-mal bearbeitet
|
|
|
|
|
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Fr 04.11.2005 10:17
Titel
|
|
|
rob hat geschrieben: | Zitat: | war da nich was mit cat? |
ahh... knapp daneben ist auch vorbei...
cut, nicht cat.
du kannst mit cut strings zerlegen. mit der option -d kann man ein anderes trennzeichen als den tabstop (also hier ein leerzeichen) angeben. |
ah, klingt mal net schlecht! gleich mal testen. cat war mir jetzt auch etwas wirr! *G*
edit:
hmm.. klappt nicht auf anhieb: Code: | cut -d= -c=datei1.sh datei2.sh
cut: Ein Eingabe-Begrenzer darf nur angegeben werden, wenn auf Feldern gearbeitet wird
,,cut --help" gibt weitere Informationen.
|
Bin grad dabei für ne schnelle lösung mit der Variable $s ein PERL-Skript zu starten, welches dann die ganze weiterverarbeitung startet.
Code: | #!/usr/bin/perl
$befehl = "sh ";
$j = 0;
foreach $i(@ARGV) {
if ($i ne "shellskript") {
if ($j > 0) {
$befehl .= " && ";
}
$befehl .= $i;
$j++;
}
}
$status = qx($befehl);
print $status;
|
Problem ist nur, dass das Perlskript wartet, bis das shellskript fertig durchgelaufen ist und nicht einfach den Befehl absetzt und weitermacht. So hab ich dann u.U. mehrere Skripte gleichzeitig am laufen.
Zuletzt bearbeitet von lordle am Fr 04.11.2005 10:25, insgesamt 1-mal bearbeitet
|
|
|
|
|
karmacoder
Dabei seit: 15.04.2002
Ort: Fürth
Alter: 42
Geschlecht:
|
Verfasst Fr 04.11.2005 12:29
Titel
|
|
|
wenn du nicht warten willst nimmst auch nur ein &.
|
|
|
|
|
lordle
Threadersteller
Dabei seit: 14.12.2001
Ort: Augsburg
Alter: 48
Geschlecht:
|
Verfasst Fr 04.11.2005 12:53
Titel
|
|
|
karmacoder hat geschrieben: | wenn du nicht warten willst nimmst auch nur ein &. |
jein!
das problem ist ja nicht nur, dass ein skript nach dem anderen gestartet wird, sondern, dass PERL wartet, bis die Shell wieder geschlossen ist und dann erst das Skript weiterverarbeitet.
Da meine Skripte mitunter 2min. laufen, ist währenddessen das PERL-Skript noch offen, was es nicht sein muss. Befehl absetzen und weiter im Text heisst hier die Devise...
|
|
|
|
|
|
|
|
Ähnliche Themen |
[php] String in Einzelteile zerlegen und in Array schreiben?
RegExp String zwischen 2 Zeichen in einem String entfernen
Zusammenhängende Pfade Illustrator zerlegen
php - array nach zeichenanzahl zerlegen
[AS] String als Variable
[PHP] String -> date
|
|