Clojure如何格式化这个shell命令

时间:2015-10-02 10:19:34

标签: shell clojure

首先,我知道Clojure有sftp包装,但我使用的是;这是一个非常具体的用例,不能使用这样的包装器。

我想从Clojure执行以下命令(手动测试命令在终端中工作)

sshpass -p <password> sftp <user>@<host> <<< $'cd <dir>\n put <file>\n bye'

任何内容<>与实际数据交换。

我正在使用clojure.java.shell包装,并尝试了以下内容:

(shell/sh "sshpass" (str " -p " password) "sftp" (str username "@" host "<<< $\'cd" path "\nput" file "\nbye\'")))

但它不起作用。我假设我的语法不正确但我使用ns重新加载所以错误不会抛出命名空间只是不断重新加载这是一个痛苦。

我需要避免使用批处理文件,我需要内联命令,但正如我所说,如果我手动运行该命令,它就可以工作。

我的语法不正确吗?

更新

在repl中返回:

{:exit 0, :out "", :err "Connected to <host>.\n"}

1 个答案:

答案 0 :(得分:0)

  1. 你不必逃避&#39; 字符。此外,它在repl中显示以下异常: RuntimeException不支持的转义字符:\&#39; clojure.lang.Util.runtimeException(Util.java:221) 读取字符串时的RuntimeException EOF clojure.lang.Util.runtimeException(Util.java:221)
  2. str不会在参数

    之间自动添加空格

    (str&#34;用户名&#34;&#34; @&#34;&#34;主持人&#34;&#34;&lt;&lt;&lt;&lt; $ cd&#34;&#34;路径& #34;&#34; \ nput&#34;&#34; file&#34;&#34; \ nbye&#39;&#34;)

  3. 生成字符串&#34; username @ host&lt;&lt;&lt; $ CDPATH \ nputfile \ nbye&#39;&#34;

    希望修复这些可以帮助