Hallo,
folgende Sequenz ist teil eines Shell Scripts: EXCLUDE="$OLDEXCLUDE -path /etc/X11/* -prune -o" find /etc $EXCLUDE -print
Problem hierbei ist, dass die Bash bei Substition der Variable EXCLUDE den Pfad /etc/X11/* aufloest und durch saemtliche Dateien im Verzeichniss ersetzt - was find nicht mag.
Escape ich den Pfad aber mit: EXCLUDE="$OLDEXCLUDE -path "/etc/X11/*" -prune -o" find /etc $EXCLUDE -print
klappts wieder nicht da Bash jetzt meinen Escape wiederrum stark Escaped (in der Form ... -path '"/etc/X11/*"') - was find auch nicht mag... Ich habe jetzt die alternative Version mit find ... | grep -ve EXCLUDE gewaehlt, bin damit aber nicht so recht zufrieden - schliesslich muesste es ja auch direkt gehen.
Wenn mir da jemand weiterhelfen kann, wuerde ich mich freuen.
cya Wolfgang
On Wed, 26 Jun 2002 14:43:23 +0000, Wolfgang Machert wrote:
Hallo,
folgende Sequenz ist teil eines Shell Scripts: EXCLUDE="$OLDEXCLUDE -path /etc/X11/* -prune -o" find /etc $EXCLUDE -print
Problem hierbei ist, dass die Bash bei Substition der Variable EXCLUDE den Pfad /etc/X11/* aufloest und durch saemtliche Dateien im Verzeichniss ersetzt - was find nicht mag.
Wenn dich das Expandieren des * stört sollte escapen eben dieses * ausreichen, also vermutlich:
EXCLUDE="$OLDEXCLUDE -path /etc/X11/* -prune -o" find /etc $EXCLUDE -print
Reinhard
Hey Reinhard, :)
On Wed, 26 Jun 2002, Reinhard Foerstermeant:
Wenn dich das Expandieren des * stört sollte escapen eben dieses * ausreichen, also vermutlich: EXCLUDE="$OLDEXCLUDE -path /etc/X11/* -prune -o" find /etc $EXCLUDE -print
Das ist auf alle Faelle eine gute Idee. Klappt aber trotzdem nicht, da sich der Stern (zumindest auf diese Art) nicht escapen laesst. Der Output waere in diesem Fall: find /etc -path '/etc/X11/*' -prune -o -print
Auch das verwenden von starken Quotes (') bringt keinen Erfolg. Trotzdem danke fuer den Tip.
Wolfgang (immer noch auf eine Erleuchtung hoffend)
Wolfgang Machert wrote:
Hallo,
Hallo,
folgende Sequenz ist teil eines Shell Scripts: EXCLUDE="$OLDEXCLUDE -path /etc/X11/* -prune -o" find /etc $EXCLUDE -print
Problem hierbei ist, dass die Bash bei Substition der Variable EXCLUDE den Pfad /etc/X11/* aufloest und durch saemtliche Dateien im Verzeichniss ersetzt - was find nicht mag.
Escape ich den Pfad aber mit: EXCLUDE="$OLDEXCLUDE -path "/etc/X11/*" -prune -o" find /etc $EXCLUDE -print
klappts wieder nicht da Bash jetzt meinen Escape wiederrum stark Escaped (in der Form ... -path '"/etc/X11/*"') - was find auch nicht mag... Ich habe jetzt die alternative Version mit find ... | grep -ve EXCLUDE gewaehlt, bin damit aber nicht so recht zufrieden - schliesslich muesste es ja auch direkt gehen.
Wenn mir da jemand weiterhelfen kann, wuerde ich mich freuen.
Hast du mal versucht das find-Kommando in einer Subshell zu starten, der man den Parameter -f mitgibt ? Damit schaltet man die "path expansion" ab.
~> bash -c 'echo /etc/X11/*' /etc/X11/XF86Config /etc/X11/Xmodmap /etc/X11/Xmodmap.remote /etc/X11/fs /etc/X11/fvwm2 /etc/X11/lbxproxy /etc/X11/proxymngr /etc/X11/rstart /etc/X11/susewm /etc/X11/twm /etc/X11/xdm /etc/X11/xinit /etc/X11/xkb /etc/X11/xserver /etc/X11/xsm
~> bash -f -c 'echo /etc/X11/*' /etc/X11/*
cya Wolfgang
Jens
Hey Jens :)
On Wed, 26 Jun 2002 22:57:54 +0200, Jens Lorenz Lorej@gmx.de meant:
Hast du mal versucht das find-Kommando in einer Subshell zu starten, der man den Parameter -f mitgibt ? Damit schaltet man die "path expansion" ab.
<...>
Ohja. Der Tip war gut, das funktioniert genau so wie ich es brauche. Ich sollte halt dochmal die Bash-manpage lesen (auch wenn der Schalter dort nur sehr selten und auch nur im Kontext erwaehnt wird). Besten Dank fuer den Tip
Wolfgang
lug-dd@mailman.schlittermann.de