Anzeige:
Ergebnis 1 bis 5 von 5

Thema: bash: Dateinamen mit Leerzeichen als Parameter

  1. #1
    Registrierter Benutzer
    Registriert seit
    Sep 2005
    Beiträge
    14

    [gelöst]bash: Dateinamen mit Leerzeichen als Parameter

    Hi!

    Wie kann ich ein Script dazu bringen das es mir einen Dateinamen mit Leerzeichen als einen Parameter ansieht?

    Folgendes Testscript mit Namen "ScriptDateiname.sh" soll einfach alle ihm übergebenen Parameter ausgeben:
    Code:
    #!/bin/sh
    
    for param in $*;do
    echo "$param"
    done
    So schauen meine Dateien aus:
    Code:
    darko@base:~/test$ ll
    insgesamt 4,0K
    -rw-r--r--  1 darko darko  0 2005-09-04 12:28 Datei mit Leerzeichen.txt
    -rw-r--r--  1 darko darko  0 2005-09-04 12:30 DateiohneLeerzeichen.txt
    -rwxr-xr-x  1 darko darko 49 2005-09-04 12:27 ScriptDateiname.sh
    darko@base:~/test$
    Wenn ich nun die Datei ohne Leerzeichen angebe dann funktioniert es:
    Code:
    darko@base:~/test$ ./ScriptDateiname.sh DateiohneLeerzeichen.txt
    DateiohneLeerzeichen.txt
    darko@base:~/test$
    Die Datei mit Leerzeichen wird aber als drei verschiedene Parameter interpretiert:
    Code:
    darko@base:~/test$ ./ScriptDateiname.sh Datei\ mit\ Leerzeichen.txt
    Datei
    mit
    Leerzeichen.txt
    darko@base:~/test$
    Auch wenn ich den Dateinamen in doppelte Anführungszeichen setze:
    Code:
    darko@base:~/test$ ./ScriptDateiname.sh "Datei\ mit\ Leerzeichen.txt"
    Datei\
    mit\
    Leerzeichen.txt
    darko@base:~/test$ ./ScriptDateiname.sh "Datei mit Leerzeichen.txt"
    Datei
    mit
    Leerzeichen.txt
    darko@base:~/test$
    Und genauso in einfache Anführungszeichen:
    Code:
    darko@base:~/test$ ./ScriptDateiname.sh 'Datei\ mit\ Leerzeichen.txt'
    Datei\
    mit\
    Leerzeichen.txt
    darko@base:~/test$ ./ScriptDateiname.sh 'Datei mit Leerzeichen.txt'
    Datei
    mit
    Leerzeichen.txt
    darko@base:~/test$
    Weiß einer von euch wie das geht?
    Ach ja, und schlussendlich will ich dann dem Script auch mehrere Dateinamen als Parameter übergeben können.

    MfG
    Darko
    Geändert von ddamjan (04.09.05 um 15:23 Uhr)

  2. #2
    Registrierter Benutzer Avatar von nordi
    Registriert seit
    Oct 2004
    Beiträge
    451
    Deine for-Schleife muss anfangen mit:

    for param in "$*"; do

    Beachte die "" um das $*. Für mehrere Dateien machst du

    programmname "datei a" "datei b" "datei c"


    Edit: 10,0 Punkte für am besten gestellte Frage seit langem
    Geändert von nordi (04.09.05 um 14:47 Uhr)
    Verallgemeinerungen sind meistens falsch.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Sep 2005
    Beiträge
    14
    Zitat Zitat von nordi
    Deine for-Schleife muss anfangen mit:

    for param in "$*"; do

    Beachte die "" um das $*. Für mehrere Dateien machst du

    programmname "datei a" "datei b" "datei c"


    Edit: 10,0 Punkte für am besten gestellte Frage seit langem
    Danke, ich geb mir Mühe.

    Jedoch... so geht es auch nicht... ich habe nun "$*" geschrieben und das Ergebniss schaut so aus das nun alle Parameter als ein Parameter angesehen werden, also genau das andere Extrem:
    Code:
    darko@base:~/test$ ./ScriptDateiname.sh "Datei mit Leerzeichen1.txt" "Datei mit Leerzeichen2.txt"
    Datei mit Leerzeichen1.txt Datei mit Leerzeichen2.txt
    darko@base:~/test$ ./ScriptDateiname.sh 'Datei mit Leerzeichen1.txt' 'Datei mit Leerzeichen2.txt'
    Datei mit Leerzeichen1.txt Datei mit Leerzeichen2.txt
    darko@base:~/test$
    Aber gut, wieder was gelernt, hehe.

    Nachtrag:
    Ich hab nun die Lösung!
    Es funktioniert mit "$@"!
    Also so funktioniert es nun:
    Code:
    #!/bin/sh
    
    for param in "$@";do
    echo "$param"
    done
    Trotzdem danke für die Hilfe!

    MfG
    Darko

  4. #4
    Registrierter Benutzer
    Registriert seit
    Sep 2005
    Beiträge
    14
    Hier, damit man sieht wozu ich das gebraucht habe.

  5. #5
    Registrierter Benutzer
    Registriert seit
    Apr 2005
    Beiträge
    93
    Man kann auch einfach am Anfang des scripts die Variable IFS setzen:
    Code:
    IFS="
    "
    Also in deinem Beispiel

    Code:
    #!/bin/sh
    IFS="
    "
    for param in $*;do
    echo "$param"
    done
    Weitere Infos

    Besonders dann nützlich, wenn man im weiteren script Dateien mit Leerzeichen verarbeitet, an die man nicht über die Parameter herankommt.
    Geändert von gnuroman (04.09.05 um 19:31 Uhr)

Ähnliche Themen

  1. Hilfe bei mohaa-server starten
    Von Freeze005 im Forum Dedizierte Spiele Server
    Antworten: 4
    Letzter Beitrag: 03.07.05, 12:53
  2. MoH-AA-Prozess wird unter putty angezeigt - kann trotzdem nicht connecten
    Von Sandmann_33 im Forum Dedizierte Spiele Server
    Antworten: 17
    Letzter Beitrag: 24.04.05, 16:19
  3. usb-festplatten
    Von w.freudenstein im Forum Linux Allgemein
    Antworten: 11
    Letzter Beitrag: 10.02.04, 20:27
  4. need help bei linux u. 3d
    Von mexx im Forum X-Konfiguration
    Antworten: 16
    Letzter Beitrag: 24.07.03, 21:30
  5. g++ und licq
    Von Ypsilon im Forum Kompilieren von Kernel und Sourcen
    Antworten: 4
    Letzter Beitrag: 17.07.02, 22:55

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •