【发布时间】:2015-07-01 16:24:01
【问题描述】:
ssh -i "path/to/my/key.key" ip.ip.ip.ip "mkdir a/a; sql 'query;' > a/a/file.txt; if [ -f a/a/file.txt ]; then if [ $(wc -l a/a/file.txt) -ge 2 ]; then echo 'done'; fi; fi; exit"
通过 ssh 连接后,我基本上是在创建一个目录,将 sql 查询写入文件。如果该文件存在,则检查其字数是否大于 1。如果字数大于 1,则回显完成,然后退出。
但是,我收到此错误:
wc: a/a/file.txt open: No such file or directory
似乎命令替换 $(wc -l a/a/file.txt) 是首先执行的(至少在 sql 查询之前),因此该文件尚未创建。有什么方法可以强制它按照其写入的顺序执行,还是有更好的方法来做到这一点?
【问题讨论】:
-
是的,你有双引号中的字符串,所以变量/命令替换/等。一切都发生在呼叫方。您需要单引号或转义扩展以避免这种情况。
-
wc -l file的输出也不能直接用于-gt测试,它包含文件名。使用wc -l <file来避免这种情况。 -
-f测试不是必需的;一旦sql返回,该文件就保证存在,因为shell 在执行sql之前创建它。