【问题标题】:jclouds ScriptBuilder not sending the statement correctly to executejclouds ScriptBuilder 未正确发送语句以执行
【发布时间】:2014-09-10 07:08:24
【问题描述】:

我正在尝试动态构建一个 bash 脚本并在 rackspace centos 实例上创建文件,但以下其中一个行为不同,不确定我在这里缺少什么。

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"

我不确定我做错了什么。

【问题讨论】:

    标签: java bash centos6 rackspace jclouds


    【解决方案1】:

    这只是您在使用 Java 时遇到的 bash 转义问题。您是否尝试过类似的方法:

    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);
    

    【讨论】:

      【解决方案2】:

      与其直接使用ScriptBuilder 类,不如使用Statements 辅助类更好。它有几个方法可以帮助你:

      • Statements.createOrOverwriteFile:我会用这个。您可以在类路径中的文件中预先创建脚本,然后只需读取文件的内容即可在服务器中创建等效的脚本。
      • Statements.appendFile:您可以使用此语句将一组行附加到文件中。

      这两个脚本都是直接使用ScriptBuilder 的更好选择。如果您最终得到多个语句,您可以将它们添加到 StatementList(这也是一个语句)。

      【讨论】:

        猜你喜欢
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 2011-04-23
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多