tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
700
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Hallo und Halli,
    Ich habe folgende Situation/Problem

    ein Bash-Programm bekommt wie normal Parameter beim Aufruf mit. Es kann ja aber sein, dass ein Parameter mit Gänsefüßen maksiert wurde um in ihm existierende Blanks nicht ungewollt in mehr als einen Parameter erschienen zu lassen.

    innerhalb dieses Bash-programms wird nun ein anderes Bash-Programm aufgerufen, in dem der größte Teil der Parameter weitergegeben wird.
    Und nun kommts: wie kann sicher gestellt werden, dass ein solcher Parameter der von dem aufrufenden Bash-Programm noch als einer erkannt worden ist in der Parameterliste für das aufzurufende Script mitgegeben werden, so dass dieses ebenfalls einen Parameter daraus sieht.

    Meine Versuche bisher liefen immer darauf raus, dass das aufgerufende Programm den einen Parameter als 2 Parameter ansah sobald ein Blank drin war.

    Hier der Beispielcode aufrufendes Bashprogramm

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #!/bin/bash
    echo $#
    sourcefile=$1
    myecho $*
    myecho $@
    echo
    myecho $*
    myecho $@
    echo
    echo shift
    shift
    echo
    myecho $*
    myecho $@
    echo
    myecho $*
    myecho $@
     
    echo
    echo $sourcefile

    Aufgerufendes Bash-programm myecho
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    #!/bin/bash
    echo -n "$#  : "
    while [[ ! -z "$1" ]]
    do
      echo -n  "\"$1\" "
      shift
    done
    echo

    hier die Ausgabe wenn die Eingabe "lala gaga" dumdum ist
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    2
    3  : "lala" "gaga" "dumdum"
    3  : "lala" "gaga" "dumdum"
     
    3  : "lala" "gaga" "dumdum"
    3  : "lala" "gaga" "dumdum"
     
    shift
     
    1  : "dumdum"
    1  : "dumdum"
     
    1  : "dumdum"
    1  : "dumdum"
     
    lala gaga

    Ich vermute mal ich begehe da irgendwo einen Gedankenfehler
    ich habe da noch einen anderen Aufruf versucht mittels folgendem Bash-Programm
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #!/bin/bash
     
    while [[ ! -z "$1" ]]
    do
      argStr=$argStr \"$1\"
      shift
    done
     
    echo $argStr
    myecho $argStr

    bekomme dann diese Ausgabe (irgendwie werden meine Parameter als Befehle verstanden )
    Code :
    1
    2
    
    ./test2.sh: line 5: "lala: command not found
    ./test2.sh: line 5: "dumdum": command not found

    Bei dem Aufruf mit trace sehe ich dann folgendes
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    bash -x test2.sh "lala gaga" dumdum
    + [[ ! -z lala gaga ]]
    + argStr=
    + '"lala' 'gaga"'
    test2.sh: line 5: "lala: command not found
    + shift
    + [[ ! -z dumdum ]]
    + argStr=
    + '"dumdum"'
    test2.sh: line 5: "dumdum": command not found
    + shift
    + [[ ! -z '' ]]
    + echo
     
    + myecho
    0  :

    ------------ Nachtrag -----------------------
    habe den Fehler mit der Befehlsinterpretation gefunden und bekomme folgendes nun
    geändertes aufgerufenes Programm (Gänsefüße fehlten da noch
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #!/bin/bash
     
    while [[ ! -z "$1" ]]
    do
      argStr="$argStr \'$1\'"
      shift
    done
     
    echo $argStr
    myecho $argStr

    resultat:
    Code :
    1
    2
    3
    
    test2.sh "lala gaga" dumdum
    \'lala gaga\' \'dumdum\'
    3  : "\'lala" "gaga\'" "\'dumdum\'"
    sieht so aus als ob er meine Maskierung der einfachen Anführungszeichen anders als erwartet interpretiert.

    wie muss das richtig heißen?
    Geändert von takidoso (10.11.11 um 12:08 Uhr) Grund: Nachtrag weiterer Versuch
     

Ähnliche Themen

  1. [BASH]
    Von Alex Duschek im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 06.05.10, 15:10
  2. bash ruft bei Login aus!
    Von the rusher im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 25.07.07, 19:27
  3. Bash <TAB>
    Von kevkev im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 18.01.06, 19:05
  4. Linux Bash
    Von kevkev im Forum Sonstige Sprachen
    Antworten: 3
    Letzter Beitrag: 23.08.05, 15:10
  5. C vs bash
    Von webfreak im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 04.04.04, 10:23