2016-07-06 4 views
1

の実行中にクローズかっこの後に余分な文字を私は現在イーサリアムgeth consoleを開き、次のコマンドを実行するための簡単なexpectスクリプトを書いています:は、スクリプトを期待:単一引用符にもかかわらず、

#!/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 

コンパイラが問題を持っています7行目(var mortalContractで始まる行)。私の周りを検索し、二重引用符内に二重引用符は、私は単一のものに二重の内側の引用符を変更し、まだそれはまだ動作しないと、次のエラーを返す期待邪魔になることがわかった。

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) 

答えて

1

は、スペースを追加する必要があります後各閉じ括弧}

1

大括弧はTclの特殊な構文です。それらはシェル内のバックティックのようなものです。その中に含まれているコマンドを実行し、その結果で置き換えます。シェルと同様に、二重引用符はコマンドの置換を可能にします。私は、中括弧あるTclの非補間引用符、使用します。単一引用符は、Tclで絶対に特別な意味を持たない(したがって期待する)こと

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

注意を - 彼らは単なる文字です。 –

関連する問題