ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
700
700
EMPFEHLEN
-
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:
sieht so aus als ob er meine Maskierung der einfachen Anführungszeichen anders als erwartet interpretiert.Code :1 2 3
test2.sh "lala gaga" dumdum \'lala gaga\' \'dumdum\' 3 : "\'lala" "gaga\'" "\'dumdum\'"
wie muss das richtig heißen?Geändert von takidoso (10.11.11 um 12:08 Uhr) Grund: Nachtrag weiterer Versuch
Ähnliche Themen
-
[BASH]
Von Alex Duschek im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 06.05.10, 15:10 -
bash ruft bei Login aus!
Von the rusher im Forum Linux & UnixAntworten: 3Letzter Beitrag: 25.07.07, 19:27 -
Bash <TAB>
Von kevkev im Forum Linux & UnixAntworten: 6Letzter Beitrag: 18.01.06, 19:05 -
Linux Bash
Von kevkev im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 23.08.05, 15:10 -
C vs bash
Von webfreak im Forum Linux & UnixAntworten: 1Letzter Beitrag: 04.04.04, 10:23





Zitieren
Login





