Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable als Argument an ein Programm übergeben
ContainerDriver
07-09-2004, 12:24
Hallo Leute,
ich habe ein kleines Problem. Ich will eine Variable als Argument an ein Programm übergeben.
Diese Variable enthält Strings mit Leerzeichen (also praktisch verschiedene Wörter).
Wie schaffe ich das nun, dass mehrere "Wörter" als ein Argument übergeben werden?
Hier ein kleines Beispiel:
#!/bin/sh
args="Argument eins Argument zwei Argument drei";
cmd="./test_prog ${args}";
${cmd};
So, Argument eins gehört zusammen, Argument zwei gehört zusammen, usw. Wenn ich das Programm normal starten würde, würde ich es so machen:
./test_prog "Argument eins" "Argument zwei" "Argument drei"
.
Wie bekomme ich das nun in einem Shell-Skript hin?
Gruß, Florian
Einfach die " hinzufügen und escapen, also so:
args="\"Argument eins\" \"Argument zwei\" \"Argument drei\"";
HTH
fs111
ContainerDriver
07-09-2004, 13:10
Danke, für die schnelle Antwort.
Das mit den \" habe ich mir auch gedacht, aber das geht irgendwie nicht. Das test_prog liestet die ganzen an ihn übergebenen Argument auf, und das ist die Ausgabe, wenn ich die \" einfüge:
[florian@leuchtturm:~]>>> sh test_script.sh
-->./test_prog
-->"Argument
-->eins"
-->"Argument
-->zwei"
-->"Argument
-->drei"
.
Was ist da denn faul? Ich nehme mal an, die Shell verarbeitet $args nicht, sondern kopiert es einfach nur in $cmd.
Gruß, Florian
lass mal ${} um args weg.
fs111
ContainerDriver
07-09-2004, 20:22
Hilft leider nicht :(
400 Zeilen Code in dem blöden Skript und der finale Aufruf klappt nicht...
peschmae
07-09-2004, 20:46
Funktionieren tut bei mir sowas:
#!/bin/sh
IFS="
"
args=("Argument eins" "Argument zwei" "Argument drei")
./test.sh ${args[0]} ${args[1]} ${args[2]}
Geht vermutlich auch einfacher, aber die Lust darauf das rauszufinden ist mir bei der im trüben Fischerei vergangen ;)
MfG Peschmä
ContainerDriver
07-09-2004, 20:59
Auch dir danke, aber so kann ich es leider nicht verwenden, da ich nicht weiß, wie viele Argumente es gibt. Ich benötige auf jeden Fall eine Lösung, bei der alle Argumente ("Argument eins", usw) in eine Variable geschrieben werden & die übergebe ich dann als Argument an das Programm das aufgerufen wird.
Gruß, Florian
peschmae
07-09-2004, 21:09
Das kannst du ja auch einfach sehr lang machen, oder? Oder kann das _richtig_ beliebig lang werden?
MfG Peschmä
ContainerDriver
07-09-2004, 21:29
Das kannst du ja auch einfach sehr lang machen, oder? Oder kann das _richtig_ beliebig lang werden?
MfG Peschmä
Naja, ich wollte das Skript so halten, das man das oben erweitern kann (also beliebig) ohne unten die Aufrufe zu ändern. Aber ich habe es jetzt hinbekommen!
Und zwar so: da ja die Varaible mit den Argumenten anscheinden von der Shell nicht mehr verarbeitet wird, sondern 1:1 übergeben wird, rufe ich das Kommando am Schluss so auf:
sh -c "$cmd";
. Hier dann der komplette Code vom Test-Skript:
#!/bin/sh
args="\"Argument eins\" \"Argument zwei\" \"Argument drei\"";
cmd="./test_prog $args";
sh -c "$cmd";
. Jetzt bin ich aber froh, dass es läuft! :)
Gruß, Florian
ThorstenS
12-09-2004, 15:00
Ist eval für sowas nicht da?
peschmae
12-09-2004, 17:34
Wie geht das dann mit eval?
MfG Peschmä
ThorstenS
12-09-2004, 18:36
Upsi, das war natürlich mehrdeutig, hier das Beispiel:
#!/bin/sh
args="\"Argument eins\" \"Argument zwei\" \"Argument drei\"";
eval "./test_prog $args"
Oder so:
args="-t -l -r"
eval "ls $args"
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.