Anzeige:
Ergebnis 1 bis 12 von 12

Thema: Variable als Argument an ein Programm übergeben

  1. #1
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418

    Variable als Argument an ein Programm übergeben

    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:
    Code:
    #!/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:
    Code:
    ./test_prog "Argument eins" "Argument zwei" "Argument drei"
    .

    Wie bekomme ich das nun in einem Shell-Skript hin?

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  2. #2
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Einfach die " hinzufügen und escapen, also so:

    Code:
    args="\"Argument eins\" \"Argument zwei\" \"Argument drei\"";
    HTH

    fs111

  3. #3
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    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:
    Code:
    [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
    Ein gebrechlich Wesen ist der X-Server.

  4. #4
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    lass mal ${} um args weg.

    fs111

  5. #5
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hilft leider nicht
    400 Zeilen Code in dem blöden Skript und der finale Aufruf klappt nicht...
    Ein gebrechlich Wesen ist der X-Server.

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Funktionieren tut bei mir sowas:
    Code:
    #!/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ä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    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
    Ein gebrechlich Wesen ist der X-Server.

  8. #8
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Das kannst du ja auch einfach sehr lang machen, oder? Oder kann das _richtig_ beliebig lang werden?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  9. #9
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Zitat Zitat von peschmae
    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:
    Code:
    sh -c "$cmd";
    . Hier dann der komplette Code vom Test-Skript:
    Code:
    #!/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
    Ein gebrechlich Wesen ist der X-Server.

  10. #10
    Registrierter Benutzer
    Registriert seit
    17.07.2003
    Beiträge
    87
    Ist eval für sowas nicht da?

  11. #11
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Wie geht das dann mit eval?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  12. #12
    Registrierter Benutzer
    Registriert seit
    17.07.2003
    Beiträge
    87
    Upsi, das war natürlich mehrdeutig, hier das Beispiel:

    Code:
    #!/bin/sh
    args="\"Argument eins\" \"Argument zwei\" \"Argument drei\"";
    eval "./test_prog $args"
    Oder so:
    Code:
    args="-t -l -r"
    eval "ls $args"

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •