我正在尝试执行这样的远程命令:
ssh root@192.168.1.2 'su - vertica -c "vsql -c \"select * from tableName where timestamp > '2016-05-15 00:00:00' limit 1 \" "'"
它给了我一个错误
ERROR 4856: Syntax error at or near "00" at character 61
LINE 1: ...rom tableName where timestamp > 2016-05-15 00:00:00 l...
虽然我直接在远程计算机上执行此查询,但它的工作正常。
有人可以提供任何线索吗?
答案 0 :(得分:0)
在ssh命令中,您不需要那些外部引号。这应该工作正常(我还修复了你最后的一些引用错误):
ssh root@192.168.1.2 su - vertica -c "vsql -c \"select * from tableName where timestamp > '2016-05-15 00:00:00' limit 1 \" "
我觉得我真的不得不提到这里,但你不应该这样做。为什么ssh到root帐户在另一个用户下运行作业?为什么不直接ssh到该用户?创建一个私钥,将public添加到authorized_keys列表中,然后执行以下操作:
ssh vertica@192.168.2.1 /opt/vertica/bin/vsql -c \"select \* from tableName where timestamp \> \'2016-05-15 00:00:00\' limit 1 \"
请注意,我在此版本中转义了更多字符。
如果您需要,唯一的技巧将是您的shell变量。您可能需要运行bash或使用.bashrc(尽管在某些发行版中会被警告,但.bashrc中有一个块可能需要修复非交互式shell。)