Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[gelöst] mittels Pipe übergebene Daten in Variable speichern

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
OsunSeyi
Hacker
Hacker
Beiträge: 373
Registriert: 27. Mai 2006, 01:28

[gelöst] mittels Pipe übergebene Daten in Variable speichern

Beitrag von OsunSeyi »

Hi,
wie kann ich mittels Pipe übergebene Daten direkt in eine Variable packen, also:

Code: Alles auswählen

cat datei.txt > programm

INHALT VON "programm":

#/bin/sh

   dos2unix

# wird den Inhalt von 'datei.txt' wieder auf der Standardausgabe ausspucken.
# Nun soll der Inhalt aber in eine Variable:

 >var

# ...tut's nicht
Wie aber dann?
tom
Benutzeravatar
OsunSeyi
Hacker
Hacker
Beiträge: 373
Registriert: 27. Mai 2006, 01:28

Re: mittels Pipe übergebene Daten in Variable speichern

Beitrag von OsunSeyi »

Nein,
mein Beispiel war auch Schrott, aber ohne Graphik keine Editier-Taste.
Was ich meine ist das ich den output eines Programms mittels Pipe an ein weiteres weiterleite.
Wenn dort jetzt zB dos2unix aufgerufen wird, wird dieses automatisch die Daten aus der Pipe bearbeiten und auf der Standardausgabe wieder ausspucken (oder was sonst so im Script steht).
Dh, das Script bekommt den output aus der Datei via die Pipe, und dann steht er dort irgendwie dos2unix zur Verfügung. Genauso wie die Aufrufparameter des Scripts in $0 zur Verfügung stehen, oder der Rückgabewert von dos2unix in $?.
Aber wenn ich jetzt die daten, die über die Pipe an mein Script geleitet wurden, in einer Variablen haben will, wie bekomme ich sie da hinein (natürlich nicht mit >var :irre: .....)?
Klar kann ich zB eine Datei als Aufrufparameter angeben und dann mit var=?(cat $1) den Inhalt in $var schaufeln, aber ich will das ja über die Pipe!

in der Hoffnung, mich halbwegs erklärt zu haben...
tom
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3180
Registriert: 25. Aug 2004, 02:13

Re: mittels Pipe übergebene Daten in Variable speichern

Beitrag von robi »

So ganz klar wird immer noch nicht was du meinst, eine Variabel kannst du weder mit ">" ">>" "|" direkt befüllen.
Allerdings hast du dir den Beitrag von framp nicht richtig angeschaut, dort wird wahrscheinlich genau gemacht was du willst.

Code: Alles auswählen

var=`cat datei.txt | programm`
mit "cat" die Datei "datei.txt" ausgelesen und mittels Pipe an eine ausführbare Datei namens "programm" übergeben. Die Ausgabe die dieses Programm jetzt macht, landet in der Variable "var"
Möglich wird das durch "Command Substitution" siehe Manpage von bash.
Manpage bash hat geschrieben:Command Substitution
Command substitution allows the output of a command to replace the command name. There are two forms:


$(command)
or
`command`
Eine Schreibweise wird nicht in alle Zeichensätze und mit alle Zeichen-Größen im Webbrowser immer deutlich erkennbar.
Die beiden winzigen "`" sind sehr leicht zu übersehen. Die andere Schreibweise ist leichter erkennbar.

Code: Alles auswählen

var=$(programm1)
Die Standard-Ausgabe des Programmes wird in die Variable eingelesen. Allerdings hier aufpassen beim Auslesen der Variable diese ist dann immer sauber zu quoten.

robi
Benutzeravatar
OsunSeyi
Hacker
Hacker
Beiträge: 373
Registriert: 27. Mai 2006, 01:28

Re: mittels Pipe übergebene Daten in Variable speichern

Beitrag von OsunSeyi »

Hi Roby,
sorry, was ich meine ist:

Code: Alles auswählen

Wenn 'dosomething' so aussieht:

#/bin/sh

dos2unix

#~~~~~~~~~~~~~ ende ~~~~~~~~~~~~~


...und 'datei' den text 'bla' enthält, ergibt der Aufruf:

$ cat datei | dosomething
bla

..jetzt aber mit unix-Zeilenumbruch ;-)
Was muß ich aber machen, um in 'dosomething' auf den mittels der Pipe übergebenen Text 'bla' zugreifen zu können, ohne 'datei' in den Aufrufoptionen von 'dosomething' referenzieren zu müssen.
Sprich:

Code: Alles auswählen

#/bin/sh
# das ist dosomething:

cat $1 | dos2unix

var=$(cat $1 | dos2unix)
echo $var

#~~~~~~~~~~~~ende~~~~~~~

wird beim Aufruf:
$ dosomething datei
bla
bla

.."$var" wird also mit dem Inhalt von 'datei' gefüllt.
Das ist aber nicht die Frage, sondern wie komme ich an 'bla', wenn 'bla' mittels Pipe an 'dosomething' übergeben wurde, und *nicht* der Dateiname als Option übergeben wurde.
Das Beispiel eins höher.

tom
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3180
Registriert: 25. Aug 2004, 02:13

Re: mittels Pipe übergebene Daten in Variable speichern

Beitrag von robi »

OsunSeyi hat geschrieben: Das ist aber nicht die Frage, sondern wie komme ich an 'bla', wenn 'bla' mittels Pipe an 'dosomething' übergeben wurde, und *nicht* der Dateiname als Option übergeben wurde.
irgendwie verstehe ich auch nicht so richtig was du machen willst. Vielleicht hilft dir das hier weiter.

Code: Alles auswählen

#/bin/sh
# das ist Script  "dosomething"

var=$(
if  [ $# -le 1 ]
then
    cat $1 | dos2unix
else
    cat -  | dos2unix
fi
)

echo "$var"
oder "schöner" geschrieben ;)

Code: Alles auswählen

#/bin/sh
# das ist Script "dosomething"

input=${1:-"-"}
var=$( cat $input | dos2unix )

echo "$var"


Mögliche Aufrufvarianten währen:

Code: Alles auswählen

# ./dosomething datei
# cat datei | ./dosomething


robi
Benutzeravatar
OsunSeyi
Hacker
Hacker
Beiträge: 373
Registriert: 27. Mai 2006, 01:28

Re: mittels Pipe übergebene Daten in Variable speichern

Beitrag von OsunSeyi »

Vielen Dank,
ich glaube, das trifft genau was ich suche!
tom

ps:
vielen Dank für das 'gelöst' :ops:
Was ich genau suchte war das 'cat -'
Vielleicht kann noch jemand was dazu sagen, was es damit auf sich hat?
Antworten