takidoso
Erfahrenes Mitglied
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
Aufgerufendes Bash-programm myecho
hier die Ausgabe wenn die Eingabe "lala gaga" dumdum ist
Ich vermute mal ich begehe da irgendwo einen Gedankenfehler
ich habe da noch einen anderen Aufruf versucht mittels folgendem Bash-Programm
bekomme dann diese Ausgabe (irgendwie werden meine Parameter als Befehle verstanden :-()
Bei dem Aufruf mit trace sehe ich dann folgendes
------------ Nachtrag -----------------------
habe den Fehler mit der Befehlsinterpretation gefunden und bekomme folgendes nun
geändertes aufgerufenes Programm (Gänsefüße fehlten da noch
resultat:
sieht so aus als ob er meine Maskierung der einfachen Anführungszeichen anders als erwartet interpretiert.
wie muss das richtig heißen?
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:
#!/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:
#!/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:
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:
#!/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:
./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:
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:
#!/bin/bash
while [[ ! -z "$1" ]]
do
argStr="$argStr \'$1\'"
shift
done
echo $argStr
myecho $argStr
resultat:
Code:
test2.sh "lala gaga" dumdum
\'lala gaga\' \'dumdum\'
3 : "\'lala" "gaga\'" "\'dumdum\'"
wie muss das richtig heißen?
Zuletzt bearbeitet: