Programm gesucht

Smalltalk
Antworten
Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Programm gesucht

Beitrag von esteel » 16.08.2002 08:54:55

Hi.

Mit Hilfe von Pipes und Redirection lassen sich aus vermeindlich einfachen Tools(find,xargs,tar...) mächtige Befehlsketten bilden. Allerdings fehlt mir da noch etwas.
Oft ist es so daß man ein PROGRAMM1 (z.B. tar tzf files.tar.gz) verwendet um eine Liste zu generieren und dann ein PROGRAMM2 (z.B. tar xzf files.tar.gz file1.txt file3.txt) mit Teilen der Liste startet. Um die Liste zu übertragen wird sicher meist eine Art Copy-Paste verwendet.
Ich suche ein Programm mit dem folgendes möglich wäre:

prog -list PROGRAMM1 -process PROGRAMM2

PROGRAMM1 wird gestartet und die Ausgabe angezeigt. Nun kann man beliebige Zeilen markieren. Und zum Schluß werden die markierten Zeilen PROGRAMM2 als Argumente übergeben.
Da PROGRAMM1 und 2 beliebig sein können wäre so etwas sehr vielseitig zu verwenden. Z.B mit tar, unzip, cvs...

Leider läßt sich soetwas schlecht mit Freshmeat suchen? Gibt es vielleicht schon so ein Programm irgendwo? Vorschläge sind willkommen :)

Stephan
Zuletzt geändert von esteel am 31.08.2006 14:11:36, insgesamt 1-mal geändert.
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

roadrunner

Beitrag von roadrunner » 16.08.2002 09:12:03

Hier eine mögliche Lösung:

Code: Alles auswählen

f=/tmp/log$$; PROGRAMM1 >$f; vi $f; cat $f | PROGRAMM2; rm $f
Beispiel:

Code: Alles auswählen

f=/tmp/log$$; ls >$f; vi $f; cat $f; rm $f
Das zeigt mal wieder die genialen Möglichkeiten einer UNIX-Shell.

Bye
roadrunner

ernohl
Beiträge: 1181
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Re: Programm gesucht

Beitrag von ernohl » 16.08.2002 09:40:57

stahl hat geschrieben:.
Oft ist es so daß man ein PROGRAMM1 (z.B. tar tzf files.tar.gz) verwendet um eine Liste zu generieren und dann ein PROGRAMM2 (z.B. tar xzf files.tar.gz file1.txt file3.txt) mit Teilen der Liste startet. Um die Liste zu übertragen wird sicher meist eine Art Copy-Paste verwendet.
Ich suche ein Programm mit dem folgendes möglich wäre:

prog -list PROGRAMM1 -process PROGRAMM2
Ich bin mir nicht sicher, Dich richtig verstanden zu haben, da Du ja manuell den Output vom 1. Programm bearbeiten willst.
Meinst Du evtl. folgendes:
PROGRAMM2 `PROGRAMM1`
Bsp.: ls -l `which cp`
Gruß
ernohl

Benutzeravatar
eC
Beiträge: 354
Registriert: 24.07.2002 13:34:13
Wohnort: karlsruhe

Beitrag von eC » 16.08.2002 13:22:46

roadrunner hat geschrieben:Hier eine mögliche Lösung:

Code: Alles auswählen

f=/tmp/log$$; PROGRAMM1 >$f; vi $f; cat $f | PROGRAMM2; rm $f
Das ist echt gut :D

Müßte man da oben vor "PROGRAMM2" nicht noch ein "xargs" einfügen?

Code: Alles auswählen

f=/tmp/log$$; PROGRAMM1 >$f; vi $f; cat $f | xargs PROGRAMM2; rm $f
gruss

eC

roadrunner

Beitrag von roadrunner » 16.08.2002 13:31:43

eC hat geschrieben:Müßte man da oben vor "PROGRAMM2" nicht noch ein "xargs" einfügen?
Volle Zustimmung.

Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Beitrag von esteel » 17.08.2002 10:29:30

roadrunner hat geschrieben:Hier eine mögliche Lösung:

Code: Alles auswählen

f=/tmp/log$$; PROGRAMM1 >$f; vi $f; cat $f | PROGRAMM2; rm $f
....
Das zeigt mal wieder die genialen Möglichkeiten einer UNIX-Shell.
Die Idee ist sehr gut. Vorallem da Unix "Bordmittel" benutzt werden.

Leider ist es nicht Vorteilhaft, daß alle Zeilen die mich nicht interessieren
per "dd" entfernt werden müßen. Man verliert den Überblick. Besonders fehlt die Möglichkeit eine gelöschte Zeile wieder herzustellen. Außerdem muß man aufpassen, daß nicht 2 mal das selbe File $f verwendet wird.
Daher die Frage ob es für so etwas schon ein Programm gibt. Vielleicht wäre das ja eine Chance sich mit mit Sourceforge zu beschäftigen und zu programmieren.. Ein Programm könnte das im Speicher ohne File machen, was den Pipes am nähesten kommt?

ernohl: Ich meinte es ehr so wie roadrunner es erklärt hat. Ich will eben noch manuel Einfluß auf die Argumentliste für PROGRAMM2 nehmen.
Das wäre vielleicht so etwas wie die Verallgemeinerung des emacs Packetes PCL-CVS. Ich sehe eine Liste, kann alles was mich interesiert markieren und auf Tastendruck wird dann ein Programm mit eben diesen Argumenten gestartet.
Zuletzt geändert von esteel am 31.08.2006 14:11:14, insgesamt 1-mal geändert.
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

roadrunner

Beitrag von roadrunner » 17.08.2002 12:21:54

stahl hat geschrieben:Leider ist es nicht Vorteilhaft, daß alle Zeilen die mich nicht interessieren per "dd" entfernt werden müßen. Man verliert den Überblick. Besonders fehlt die Möglichkeit eine gelöschte Zeile wieder herzustellen. Außerdem muß man aufpassen, daß nicht 2 mal das selbe File $f verwendet wird.
Ein Undo gib es auch im vi (Taste u). Falls Du aber einen Editor mit GUI bevorzugst, kein Problem:

Code: Alles auswählen

f=/tmp/log$$; ls >$f; kwrite $f; cat $f | xargs echo; rm $f
Mit dem File gibt es auch keine Probleme. Durch das $$ am Ende der Environment-Variablen wir am Ende des Dateinamens die aktuelle PID angehängt. Damit können mehrere Prozesse laufen und jeder hat sein eigenes Temp-File.

Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Beitrag von esteel » 19.08.2002 07:55:20

roadrunner hat geschrieben: Ein Undo gib es auch im vi (Taste u). Falls Du aber einen Editor mit GUI bevorzugst, kein Problem:
Nein nein, der Editor ist nicht das Problem.. stell dir mal vor du benutzt das Ganze um ein paar Files aus einem tar.gz zu extrahieren. Dann müßtest du alle Zeilen( bzw. Dateien ) die du nicht extrahiert haben willst aus der Datei löschen. ( Im Falle von vi eben mit dd ) Erst einmal siehst du dann alle Zeilen( Dateien ) nicht mehr die du gelöscht hast, verlierst also etwas die Übersicht.. Sogar wenn du es dir noch einmal ANDERS überlegen solltest. Mit undo, egal bei welchem Editor kannst du immer nur der Reihe nach ein undo machen. Wenn ich also 10 Zeilen lösche weil ich die Dateien nicht brauche, dann kann ich es mir nicht anders überlegen und die 1. dieser Zeilen wieder hinzufügen...
Aber wir könnten bei jeder Zeile die uns interesiert, an jeden Zeilenanfang einen "MagicCode" hinzifügen, leiten das Ganze noch kurz in einen sed und laßen alle dann alle Zeilen ohne entfernen. ( Und natürlich das Magic selbst auch ) So behält man die Übersicht und kann quasi alles interesante "markieren" ???
roadrunner hat geschrieben: Mit dem File gibt es auch keine Probleme. Durch das $$ am Ende der Environment-Variablen wir am Ende des Dateinamens die aktuelle PID angehängt. Damit können mehrere Prozesse laufen und jeder hat sein eigenes Temp-File.
Das ist super. Danke, habe ich noch nicht gewußt.
Zuletzt geändert von esteel am 31.08.2006 14:11:04, insgesamt 1-mal geändert.
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

roadrunner

Beitrag von roadrunner » 19.08.2002 08:21:35

stahl hat geschrieben:Nein nein, der Editor ist nicht das Problem.
Verstanden. Du sucht also folgendes:

Code: Alles auswählen

PROGRAMM1 | PIPE_SELECT | xargs PROGRAMM2
Das Programm PIPE_SELECT ließt von STDIN und gibt dann alle selektierten Zeilen nach STDOUT aus. Damit spart man dann noch das Temp-File ein.
Sorry , leider kenne ich kein Programm mit der Funktion von PIPE_SELECT.

roadrunner

Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Beitrag von esteel » 19.08.2002 09:42:06

roadrunner hat geschrieben: Verstanden. Du sucht also folgendes:

Code: Alles auswählen

PROGRAMM1 | PIPE_SELECT | xargs PROGRAMM2
Das Programm PIPE_SELECT ließt von STDIN und gibt dann alle selektierten Zeilen nach STDOUT aus. Damit spart man dann noch das Temp-File ein.
Sorry , leider kenne ich kein Programm mit der Funktion von PIPE_SELECT.
Genau.
Vielleicht waren meine Erklärungen etwas schwer verständlich. Das liegt sicher auch daran, daß ich bis eben noch der Meinung war, wenn ein Programm von STDIN liest und auf STDOUT ausgibt, dann kann es nicht per Tastatur bedient werden, weil das ja normalerweise STDIN ist. Deswegen mein Umweg über PIPE_SELECT --list PROGRAMM1 --process PROGRAMM2. Das hat sicher nicht zum Verständnis beigetragen.
Ich habe aber gerade gemerkt, daß ein less < file.txt sich per Tastatur bedienen läßt. Dann wird das mit der Ausgabe auf STDOUT auch gehen?

Deine Vorschläge mit einem Editor sind ein guter Ersatz und absolut brauchbar!

Vorallem ist mir kein Name für so ein Programm eingefallen. PIPE_SELECT klingt sehr gut. Ich werde mal auf Freshmeat nach soetwas suchen vielleicht gibt es das ja doch schon.
Zuletzt geändert von esteel am 31.08.2006 14:10:52, insgesamt 1-mal geändert.
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

Benutzeravatar
esteel
Beiträge: 242
Registriert: 23.07.2002 11:06:25
Kontaktdaten:

Beitrag von esteel » 19.08.2002 09:57:35

Ich habe da tatsächlich etwas gefunden:

http://www.engelschall.com/sw/iselect/
i support free software: http://www.fsfe.org/en/fellows/esteel
a great free and opensource FPS game: http://nexuiz.com

Antworten