2016-07-06 18 views
1

Ich bin derzeit ein einfaches expect Skript zu schreiben, das Astraleum geth console und die folgenden Befehle zu öffnen:Skript erwarten: zusätzliche Zeichen nach close-Stütze, während trotz einfachen Anführungszeichen Ausführung

#!/usr/bin/expect 
spawn /usr/bin/geth --testnet console 
expect ">" 
send "personal.unlockAccount('0xdc85a8429998bd4eef79307e556f70bb70d8caf1','X');\r" 
expect "true" 
expect ">" 
send "var mortalContract=web3.eth.contract([{constant:!1,inputs:[],name:'kill',outputs:[],type:'function'},{constant:!1,inputs:[],name:'cashOut',outputs:[],type:'function'},{inputs:[],type:'constructor'}]),mortal=mortalContract['new']({from:'0xdc85a8429998bd4eef79307e556f70bb70d8caf1',data:'60606040525b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b61016e8061003f6000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806341c0e1b514610044578063793cd71e1461005357610042565b005b6100516004805050610062565b005b61006060048050506100f6565b005b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156100f357600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b60003073ffffffffffffffffffffffffffffffffffffffff16319050600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600060028304604051809050600060405180830381858888f19350505050505b5056',gas:47e5},function(f,t){console.log(f,t),'undefined'!=typeof t.address&&console.log('Contract mined! address: '+t.address+' transactionHash: '+t.transactionHash)});\r" 
expect "undefined" 
expect ">" 
send "exit\r" 
expect eof 

Der Compiler ein Problem aufgetreten ist mit Linie 7 (die mit var mortalContract beginnt). Ich suchte um und stellte fest, dass doppelte Anführungszeichen in doppelte Anführungszeichen stört erwarten, so änderte ich die doppelten inneren Anführungszeichen einzelne diejenigen aber es funktioniert immer noch nicht und gibt den folgenden Fehler:

extra characters after close-brace 
    while executing 
"send "var mortalContract=web3.eth.contract([{constant:!1,inputs:[],name:'kill',outputs:[],type:'function'}," 
    (file "expectScript.js" line 7) 

Antwort

1

Brauchen Sie noch einen Raum, um nach jede schließende Klammer}

1

Eckige Klammern sind spezielle Syntax in Tcl. Sie sind wie Backticks in der Shell: Führen Sie den darin enthaltenen Befehl aus und ersetzen Sie ihn durch das Ergebnis. Wie die Shell erlauben doppelte Anführungszeichen die Ersetzung von Befehlen. Ich würde Tcl nicht-Interpolations-Zitate verwenden, die geschweiften Klammern sind:

send {var mortalContract=web3.eth.contract([{constant:... '+t.transactionHash)});} 
# ...^...........................................................................^ 
send "\r" 
+0

Beachten Sie, dass einfache Anführungszeichen haben absolut keine besondere Bedeutung in Tcl (und daher erwarten) - sie sind einfach nur Zeichen. –