• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

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

OsunSeyi

Hacker
Hi,
wie kann ich mittels Pipe übergebene Daten direkt in eine Variable packen, also:
Code:
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
 
OP
OsunSeyi

OsunSeyi

Hacker
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
 
A

Anonymous

Gast
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:
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 schrieb:
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:
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
 
OP
OsunSeyi

OsunSeyi

Hacker
Hi Roby,
sorry, was ich meine ist:
Code:
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:
#/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
 
A

Anonymous

Gast
OsunSeyi schrieb:
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:
#/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:
#/bin/sh
# das ist Script "dosomething"

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

echo "$var"

Mögliche Aufrufvarianten währen:
Code:
# ./dosomething datei
# cat datei | ./dosomething



robi
 
OP
OsunSeyi

OsunSeyi

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

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