PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fehler im bash-3-zeiler.



gravity
18-06-2004, 14:59
hallo,

erkennt einer von euch den fehler? im prinzip soll das so funktionieren, dass die werte der variablen PRINT nicht mit ausgegeben werden (grep -v). leider wird nur der erste ordner der variablen (sbin) nicht mit ausgegeben. woran könnte das liegen?



#!/bin/sh

PRINT="sbin opt var usr bin home logfiles tmp etc export src"

ls -la / | for var in $PRINT ; do grep -v $var ; done




PS: versucht nicht den sinn in diesem script zu finden:D ist eher für übungszwecke gedacht...

fork
18-06-2004, 15:58
Der erste grep verarbeitet die Ausgabe von "ls" bis die komplette Ausgabe abgearbeitet ist. Die weiteren greps erhalten gar keine Standardeingabe mehr bzw. eine leere Standardeingabe -> Wirkung=0

Der Befehl müsste entweder so:

ls -la / | grep -v sbin | grep -v opt | ...
oder mit einem zusammengesetzten RegEx-Muster so aussehen.

ls -la / | grep -vE "(sbin|opt|.....)"

Also insgesamt etwa so(2. Variante):

PRINT="sbin opt var usr bin home logfiles tmp etc export src"

RE="("
i=0
for var in $PRINT
do
[ $i -gt 0 ] && RE="$RE|"
RE="$RE$var"
((i=$i+1))
done
RE="$RE)"

set -x
ls -la / | grep -vE "$RE"

Blackhawk
22-06-2004, 13:17
ausserdem wuerd ich keine reservierten Woerter fuer Variablennamen nehmen, so tut das evt. in der Bash, aber nicht in anderen posix-shells...