Shell



  • Hallo,

    ich komme nicht weiter, viell. habt Ihr ne Idee:

    Ich habe eine Script, was auf gerufen wird und eine Datei übergeben bekommt:

    ./shutdown.sh /home/vmware/virtual\ machines/linux93_06.61.14_/SUSE\ Linux.vmx
    

    Skript-Code:

    #!/bin/sh
    echo $1 #Check ich ob der Übergebene Pfad okay ist
    export VAR1; VAR1=$(vmware-cmd  $1  getstate)
    #VAR1 soll den Rückgabe wert des Kommandos haben s.o.
    #das Kommando lautet "vmware-cmd /home/vmware/virtual\ machines/linux93_06.61.14_/SUSE\ Linux.vmx getstat
    #wenn ich es als Kommando eingebe funzt es
    echo $VAR1
    
    if [ $VAR1 -eq 'getstate() = on'] #wenn zurück kommt on
    then
     #fahre runter
    else
     #mach was anders
    fi
    

    Wenn ich das Skript starte und mir $1 anzeigen lasse, kommt noch der Komplette Pfad.

    Aber Dann kommt der Fehler:

    linux-vmware-srv:/tools # ./shutdown.sh /home/vmware/virtual\ machines/linux93_06.61.14/SUSE\ Linux.vmx
    /home/vmware/virtual machines/linux93_pds_06.61.14_RAMONAT/SUSE Linux.vmx
    /usr/bin/vmware-cmd: Could not connect to VM /home/vmware/virtual
      (VMControl error -11: No such virtual machine: The config file /home/vmware/virtual is not registered.
    Please register the config file on the server.  For example:
    vmware-cmd -s register "/home/vmware/virtual")
    

    Der Schneidet an den Leerzeichen ab, aber WTF funktioniert es auf der Shell?
    z.B.:

    linux-vmware-srv:/tools # vmware-cmd /home/vmware/virtual\ machines/linux93_06.61.14_/SUSE\ Linux.vmx getstate
    getstate() = on
    

    Ich komm nicht weiter, habe bestimmt nur einen kleinen Denkfehler drin, aber nervt 😉

    Danke Euch schonmal

    Gruss ALex



  • Im Script interpoliert die Shell die Variable an der Stelle ihres Auftauchens wieder (inkl. Leerstellen) und gibt die einzelnen Wörter sozusagen as-is an den Kontext weiter. Dein vmware bekommt also drei Parameter, nämlich den Pfad bis zur jeweiligen Leerstelle.

    Versuche:

    VAR1=$(vmware-cmd  "$1"  getstate)
    

    BTW: Den Rückgabewert bekommst Du nach dem Programmablauf mit $?. Das was Du dort liest mit $() ist die Ausgabe des Programms.



  • Hallo LordJaxom

    Danke,Danke,Danke ... das mit dem Interpolieren war mir klar, aber der hat es ja zerrissen. Ich habe alles Ausprobiert blos nicht das "$1" 👎 also die Anführungsstriche... das war mein Bug, der Rückgabewert steht richtig in VAR1 drin ...jetzt kann ich weiter auswerten ...

    Danke Dir 👍

    Gruss ALex


Anmelden zum Antworten