2014-07-19 77 views
0

我想動態地創建一個bash腳本,並創建rackspace centos實例上的文件,以下之一的行爲不同,不知道我在這裏丟失什麼。jclouds ScriptBuilder不發送正確的語句執行

String script = new ScriptBuilder() 
.addStatement(exec("echo ' expect \"Enter Password :\"' >> config.sh "))  
.addStatement(exec("echo ' send -- \"123\"' >> config.sh "))    
.addStatement(exec("echo ' send -- \"\\r\"' >> config.sh ")) 
       .render(OsFamily.UNIX);    

當我登錄到框並查看config.sh。

expect "Enter Password:" 
send -- "123" 
"send --" 

但我希望看到

expect "Enter Password:" 
send -- "123" 
send -- "\r" 

我不知道我做錯了。

回答

0

不是直接使用ScriptBuilder類,而是使用Statements輔助類更好。它有幾個方法可能會幫助你:

  • Statements.createOrOverwriteFile:我會用這個。您可以在類路徑中的文件中預先創建腳本,只需讀取該文件的內容即可在服務器中創建相應的文件。
  • Statements.appendFile:您可以使用此語句將一組行添加到文件中。

這兩種腳本都是直接使用ScriptBuilder的更好選擇。如果您最終得到多個陳述,您可以將它們添加到StatementList(這也是一個陳述)。

0

這只是bash逃避的問題,你已經在這裏與Java碰到了。你有沒有試過類似的東西:

String script = new ScriptBuilder() 
    .addStatement(exec("echo ' expect \"Enter Password :\"' >> config.sh "))  
    .addStatement(exec("echo ' send -- \"123\"' >> config.sh "))    
    .addStatement(exec("(echo ' send -- '; echo '\r') >> config.sh ") 
    .render(OsFamily.UNIX);