Hallo,
wie kann ich einen String mit Leerzeichen als ein Argument übergeben ? Zum Beispiel:
brennen "/mnt/this is a test"
wobei "brennen" das aufzurufende bash Skript wäre und "/mnt/this is a test" das Argument $1. Konkret ein Dateiname.
Das Problem ist, das trotz Anführungszeichen um das Argument nur der erste Teil erkannt wird (bis zum ersten Leerzeichen). Der Nachfolgende Teil ("is") wäre schon $2. Und das soll nicht.
Argumente mit Leerzeichen an ein Skript übergeben
Re: Argumente mit Leerzeichen an ein Skript übergeben
wenn du diese angabe mit backslashes machst:
brennen /mnt/this\ is\ a\ test
dann sollte es funktionieren.
bei mir funktioniert es allerdings auch mit anführungzeichne, so wie oben bei dir, korrekt:
testscript:
#!/bin/sh
echo "$1"
wenn ich jettzt z.b. eingebe:
./testscript "Ich liebe pro-linux"
bekomme ich :
Ich liebe pro-linux
brennen /mnt/this\ is\ a\ test
dann sollte es funktionieren.
bei mir funktioniert es allerdings auch mit anführungzeichne, so wie oben bei dir, korrekt:
testscript:
#!/bin/sh
echo "$1"
wenn ich jettzt z.b. eingebe:
./testscript "Ich liebe pro-linux"
bekomme ich :
Ich liebe pro-linux
Last edited by greg on 15. Aug 2001 22:13, edited 2 times in total.
Re: Argumente mit Leerzeichen an ein Skript übergeben
Danke erstmal für Deine Antwort. Ich bin ein Stück weiter. Aus irgendwelchen Gründen will mkisofs das Argument nicht. "echo" zeigt $1 korrekt an, aber mkisofs nicht mehr. Rufe ich mkisofs aber direkt auf mit dem Dateinamen in Anführungszeichen, haut alles hin:
#!/bin/sh
MKISO=/usr/bin/mkisofs
CDR=/usr/bin/cdrecord
DEV="1,6,0"
if [ "$1" = "erase" ];then
$CDR dev=$DEV blank=all
echo "CD erased"
exit 0
fi
echo $1; echo
$MKISO -iso-level 2 -r -o /mnt/tmp/cd.raw $1
$CDR -v -V speed=4 dev=$DEV /mnt/tmp/cd.raw
rm -f /mnt/tmp/cd.raw
exit 0
> ./brenn "/mnt/tmp/this is a test"/mnt/tmp/this is a test
/usr/bin/mkisofs: No such file or directory. Invalid node - /mnt/tmp/this
/usr/bin/cdrecord: No such file or directory. No read access for '/mnt/tmp/cd.raw'.
Der letzte Punkt ist klar ... cd.raw gibt es noch nicht.
Rufe ich aber
mkisofs -iso-level 2 -r -o /mnt/tmp/cd.raw "/mnt/tmp/this is a test"
direkt auf, gibt es keine Probleme.
Kurios.
#!/bin/sh
MKISO=/usr/bin/mkisofs
CDR=/usr/bin/cdrecord
DEV="1,6,0"
if [ "$1" = "erase" ];then
$CDR dev=$DEV blank=all
echo "CD erased"
exit 0
fi
echo $1; echo
$MKISO -iso-level 2 -r -o /mnt/tmp/cd.raw $1
$CDR -v -V speed=4 dev=$DEV /mnt/tmp/cd.raw
rm -f /mnt/tmp/cd.raw
exit 0
> ./brenn "/mnt/tmp/this is a test"/mnt/tmp/this is a test
/usr/bin/mkisofs: No such file or directory. Invalid node - /mnt/tmp/this
/usr/bin/cdrecord: No such file or directory. No read access for '/mnt/tmp/cd.raw'.
Der letzte Punkt ist klar ... cd.raw gibt es noch nicht.
Rufe ich aber
mkisofs -iso-level 2 -r -o /mnt/tmp/cd.raw "/mnt/tmp/this is a test"
direkt auf, gibt es keine Probleme.
Kurios.
Re: Argumente mit Leerzeichen an ein Skript übergeben
Hups, da hat das Forum doch glatt nen Zeilelumbruch gefressen. Die richtige Ausgabe muß lauten:
>./brenn "/mnt/tmp/this is a test"
/mnt/d_hdg1/this is a test
/usr/bin/mkisofs: No such file or directory. Invalid node - /mnt/d_hdg1/this
/usr/bin/cdrecord: No such file or directory. No read access for
'/mnt/d_hdg1/cd.raw'.
>./brenn "/mnt/tmp/this is a test"
/mnt/d_hdg1/this is a test
/usr/bin/mkisofs: No such file or directory. Invalid node - /mnt/d_hdg1/this
/usr/bin/cdrecord: No such file or directory. No read access for
'/mnt/d_hdg1/cd.raw'.
Re: Argumente mit Leerzeichen an ein Skript übergeben
Und statt "d_hdg1" natürlich "tmp". Und jetzt gehe ich ins Bett ....
Re: Argumente mit Leerzeichen an ein Skript übergeben
Wie sieht denn die Zeile mit dem mkisofs-Aufruf in deinem Script aus ?
Probier mal
mkisofs [Optionen] "$1"
statt
mkisofs [Optionen] $1
Probier mal
mkisofs [Optionen] "$1"
statt
mkisofs [Optionen] $1
Re: Argumente mit Leerzeichen an ein Skript übergeben
Götterknabe ! Das "$1" ist es gewesen (die Anführungszeichen). Danke und schönen Abend noch
Re: Argumente mit Leerzeichen an ein Skript übergeben
> Danke und schönen Abend noch
Danke, gleichfalls.
Danke, gleichfalls.