Am Montag, 23. Februar 2004 17:52 schrieb Falk Sauer:
das ist zum verzweifeln, ich hab hier ein shellscript in dem ich was erweitern möchte, das Problem stellt sich isoliert folgendermassen dar:
#!/bin/sh echo DEFANGED.12746 exit #!/bin/sh # set -xv CKSUM="/usr/bin/cksum" CKSUM_OUT=`$CKSUM tf1 tf2` echo $CKSUM_OUT | read VALUE1 SIZE1 NAME1 VALUE2 SIZE2 NAME2 # echo "Cksum = $CKSUM_OUT" echo "Val1 = $VALUE1" echo "Val2 = $VALUE2" echo "Nam1 = $NAME1" echo "Nam2 = $NAME2" echo "Siz1 = $SIZE1" echo "Siz2 = $SIZE2" echo " "
wobei tf1 und tf2 beliebige testfiles sind.
Das Ergebnis von cksum ist ein string der jew. 3 elemente hat und dazwischen ein newline, die IFS Variable sollte doch per default eigentlich auf space,newline und tab stehen und trotzdem kommt in den Variablen nix an.
man bash ;-)
Das Problem taucht hier regelmäßig auf. Durch Pipes verbundene
Prozesse werden in eigenen Subshells ausgeführt, ergo können die
dort gesetzten Variablen dahinter im Script (weil zurück in der
aufrufenden Shell) nicht ankommen.
Du kannst es so machen:
jan@roland:~/tmp> COUT="`cksum datei do.pl`"
jan@roland:~/tmp> read a b c d e f < `echo $COUT`
EOF
jan@roland:~/tmp> echo $a
233738288
jan@roland:~/tmp> echo $b
254
jan@roland:~/tmp> echo $c
datei
jan@roland:~/tmp> echo $d
3253018791
jan@roland:~/tmp> echo $e
216
jan@roland:~/tmp> echo $f
do.pl Jan
P.S.: Deine Signatur ist etwas lang