Command Substitution
Command Substitution
Ich muss ein Programm unter `<progname>` ausführen, dass leider in einer Endlosschleife rennt. Quasi wie ein Server.
Nun habe ich aber das Problem, dass mein Script genau in dieser Zeile hängen bleibt, da `<progname>` nichts returned.
Wie könnte ich das machen?
Nun habe ich aber das Problem, dass mein Script genau in dieser Zeile hängen bleibt, da `<progname>` nichts returned.
Wie könnte ich das machen?
Ein eigenes kleines Programm namens uploader, dass regelmäßig ein Bild hochlädt.
Auch als Hintergrundprozess funktioniert es nicht:
Die bash kehrt nicht zurück, bevor ich Ctrl + C drücke
Auch als Hintergrundprozess funktioniert es nicht:
Code: Alles auswählen
bash$ `./uploader &`
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Wenn ich das richtig verstehe, willst Du innerhalb des Scriptes ein Programm in den Hintergrund schicken, dann muss Du innerhalb des Scripts mit dem & arbeiten, also: /pfad/zum/programm &
Anschliessend sollte das Script weiterlaufen.
Gruss, mistersixt.
Anschliessend sollte das Script weiterlaufen.
Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Sorry, aber ich verstehe noch immer nicht genau, was du vorhast.
Wenn du dein Skript "normal" ausführst, dann läuft dieses in einer Endlosschleife? Die Shell ist aber dann "blockiert" und du kannst das Skript mit STRG + c abbrechen.
Das möchtest du aber nicht und deshalb willst du das Skript in den Hintergrund setzen?
Wenn du dein Skript "normal" ausführst, dann läuft dieses in einer Endlosschleife? Die Shell ist aber dann "blockiert" und du kannst das Skript mit STRG + c abbrechen.
Das möchtest du aber nicht und deshalb willst du das Skript in den Hintergrund setzen?
Oh, yeah!
Nein, ich habe ein kleines Perlscript, das in
die $eingabe verwendet, um in bilder.txt zu suchen.
Nun wollte ich in $eingabe
testweise einfügen, damit dieser ausgeführt wird. Normalerweise würde ja die Rückgabe des uploader's als $eingabe verwendet, doch da er endlos läuft, klappt es nicht.
Ich hoffe das war verständlicher erklärt. Das das Ganze vielleicht keinen Sinn macht, ist mir klar. Aber es würde mich dennoch interessieren, ob es auch ohne Blockieren möglich ist.
Code: Alles auswählen
$ergebnis=`grep -i "$eingabe" bilder.txt`;
Nun wollte ich in $eingabe
Code: Alles auswählen
`./uploader`
Ich hoffe das war verständlicher erklärt. Das das Ganze vielleicht keinen Sinn macht, ist mir klar. Aber es würde mich dennoch interessieren, ob es auch ohne Blockieren möglich ist.
hi,
wenn uploader nichts ausgibt kann's natürlich nicht gehen. Aber auch wenn
der in bestimmten Abständen eine Zeile ausgibt, kann das Perl-Script doch
nur eine verwenden (die erste oder die letzte).
Vielleicht hilft dir ein fflush(stdout); oder ein fclose(stdout); im uploader.
wenn uploader nichts ausgibt kann's natürlich nicht gehen. Aber auch wenn
der in bestimmten Abständen eine Zeile ausgibt, kann das Perl-Script doch
nur eine verwenden (die erste oder die letzte).
Vielleicht hilft dir ein fflush(stdout); oder ein fclose(stdout); im uploader.
Beware of programmers who carry screwdrivers.
mal was anderes: eigentlich könntest du doch die Funktionalität
des Scripts gleich in den updater mit einbauen?
noch was anderes: wenn du den updater nicht aus den Script
heraus aufrufst, sondern so
kann das Script über sein stdin die Ausgabe des updaters lesen,
und zwar zeilenweise, wenn du im updater ein fflush(stdout)
nach jeder Zeile spendierst.
Das Script kann dann in einer Endlos-Schleife jede Zeile einzeln
verarbeiten. Als Shell-Script (wer kann schon Perl) einfach so:
des Scripts gleich in den updater mit einbauen?
noch was anderes: wenn du den updater nicht aus den Script
heraus aufrufst, sondern so
Code: Alles auswählen
updater | perl_script
und zwar zeilenweise, wenn du im updater ein fflush(stdout)
nach jeder Zeile spendierst.
Das Script kann dann in einer Endlos-Schleife jede Zeile einzeln
verarbeiten. Als Shell-Script (wer kann schon Perl) einfach so:
Code: Alles auswählen
#!/bin/sh
while read eingabe; do
ergebnis=`grep -i "$eingabe" bilder.txt`
done
Beware of programmers who carry screwdrivers.