Hallo Liste, schon wieder ich. :-) Ich habe da ein interessantes Verhalten, was ich icht verstehe: if [ -e *.m3u ]; then .... fi klappt bestens. if [ -e *.mp3 ]; then .... fi klappt nicht. Stattdessen kriege ich eine Fehlermeldung von wegen: ./testscript: [: too many arguments Scheinbar findet er die 3 am Ende des Strings nicht toll. if [ -e "*.mp3" ] klappt hingegen auch nicht. Wo mache ich hier den Denkfehler? Woran liegt's? Liebe Grüsse Michael
Am 21.04.2002 um 17:21 schrieb Michael Rolli:
schon wieder ich. :-) Ich habe da ein interessantes Verhalten, was ich icht verstehe:
if [ -e *.m3u ]; then .... fi klappt bestens. if [ -e *.mp3 ]; then .... fi klappt nicht.
Stattdessen kriege ich eine Fehlermeldung von wegen: ./testscript: [: too many arguments
Scheinbar findet er die 3 am Ende des Strings nicht toll. if [ -e "*.mp3" ] klappt hingegen auch nicht.
Wo mache ich hier den Denkfehler? Woran liegt's?
Bevor die Shell die Bedingung überprüft, werden die Wildcards expandiert. Wenn du mehrere Dateien hast, die auf *.mp3 treffen, stehen also alle ihre Namen in der Bedingung. Und da der -e Test nur ein Argument erwartet, ergibt sich ein Fehler. Siehe man 1 bash. Ich würde da vielleicht so herangehen: if [ -n "$(find *.mp3 2>/dev/null)" ]; then echo "yes" ;fi; MfG, Dennis -- Dennis Stosberg eMail: dennis@stosberg.net pgp key: http://stosberg.net/dennis.asc icq: 63537718
Hallo Michael, Am Sonntag, 21. April 2002 17:21 schrieb Michael Rolli:
Ich habe da ein interessantes Verhalten, was ich icht verstehe:
if [ -e *.m3u ]; then .... fi klappt bestens.
Wette: Es gibt _genau eine_ Datei mit der Endung .m3u im Verzeichnis.
if [ -e *.mp3 ]; then .... fi klappt nicht.
Wette: Es gibt mehrere. *g* Im Ernst: Zweites Konstrukt klappt nicht, weil die Shell den Ausdruck expandiert, bevor test ihn zu sehen bekommt. Für test stellt sich die Situation beispielsweise so da: if [ -e BieneMaja.mp3 BenjaminBlümchen.mp3 ... ]; then ... Damit kann test natürlich nichts anfangen, da -e genau einen Dateinamen erwartet.
Stattdessen kriege ich eine Fehlermeldung von wegen: ./testscript: [: too many arguments
Siehe oben.
Scheinbar findet er die 3 am Ende des Strings nicht toll.
Nein, daran liegts nicht.
if [ -e "*.mp3" ] klappt hingegen auch nicht.
Weil keine Datei im Verzeichnis liegt, die *.mp3 heißt. Was genau willst Du denn machen? Willst Du nur wissen, ob mindestens eine Datei mit der Endung .mp3 im Verzeichnis liegt? Schöne Grüße, Stephan
Was genau willst Du denn machen? Willst Du nur wissen, ob mindestens eine Datei mit der Endung .mp3 im Verzeichnis liegt? Genau sowas schwebt mir vor. Ich habe da noch den Tip von Dennis Stosberg mit if [ -n "$(find *.mp3 2>/dev/null)" ] ... aber das wäre wohl ein overkill (Trozdem vielen Dan Dich, Dennis). Ich will nur wissen, ob mind. 1 mit Endung .mp3 da ist.
Vielen Dank für Eure Mühe Gruss Michael
Hallo, Am Sonntag, 21. April 2002 18:56 schrieb Michael Rolli:
Was genau willst Du denn machen? Willst Du nur wissen, ob mindestens eine Datei mit der Endung .mp3 im Verzeichnis liegt?
Genau sowas schwebt mir vor. Ich habe da noch den Tip von Dennis Stosberg mit if [ -n "$(find *.mp3 2>/dev/null)" ] ... aber das wäre wohl ein overkill (Trozdem vielen Dan Dich, Dennis). Ich will nur wissen, ob mind. 1 mit Endung .mp3 da ist.
nö, overkill ist das nicht, trotzdem geht's noch ein bisschen kürzer: if ls *.mp3 > /dev/null 2>&1; then echo gefunden; fi Schöne Grüße, Stephan
participants (3)
-
Dennis Stosberg
-
Michael Rolli
-
Stephan Hakuli