【问题标题】:bash syntax error for command命令的bash语法错误
【发布时间】:2014-12-18 08:56:05
【问题描述】:

我有一个清单:

jos = ['/usr/bin/hive', '-e', "'set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where device_id = '59ab' and event_timestamp = '141833140000';'"]

我会这样处理列表

cmdlines = " ".join(map(lambdas x:("'"+x+"'"), jos))

然后我会在 paramiko 中推送这个字符串:

stdin,stdout,stderr = ssh.exec_command(cmdlines)

paramiko 所做的只是让我ssh 进入另一台机器。

我目前遇到语法错误

stderr.readlines() 产生

[u"bash: -c: line 0: syntax error near unexpected token `from'\n", u"bash: -c: line 0: `'/usr/bin/hive' '-e' ''set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where application_mobile_device_id = '59ab' and event_timestamp = '141833140000';'''\n"]

不确定此错误的含义或需要修复的地方

【问题讨论】:

  • 看起来像“''”导致问题
  • @BallPython 是的,由于查询,我正在处理一些“'”。不知道如何解决这个=[
  • 尝试逃脱它们,应该可以工作
  • lambda,而不是lambdas

标签: python bash ssh paramiko


【解决方案1】:

当您初始化jos 时,我注意到您非常小心地在包含' 的字符串周围使用"..." 而不是'...';但是当您初始化 cmdlines 时,您会抛弃这种谨慎:

cmdlines = " ".join(map(lambdas x:("'"+x+"'"), jos))

在这里,您只需将所有字符串包装在 '...' 中并在它们之间放置空格。所以你的实际 Bash 脚本(你对 bash -c 的实际参数)是:

'/usr/bin/hive' '-e' ''set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where application_mobile_device_id = '59ab' and event_timestamp = '141833140000';''

当你真正需要的是:

'/usr/bin/hive' '-e' "set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where application_mobile_device_id = '59ab' and event_timestamp = '141833140000';"

甚至:

/usr/bin/hive -e "set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where application_mobile_device_id = '59ab' and event_timestamp = '141833140000';'"

(注意:我还删除了第三个字符串周围的一些'-s。你有"'...'",你只想要"..."。)

最好的解决办法可能是取消jos 数组。不要太在意 Bash 脚本的内容;直接设置cmd_lines

cmd_lines = "/usr/bin/hive -e \"set mapred.job.queue.name=exp_dsa; select * from trinity.clickstream where application_mobile_device_id = '59ab' and event_timestamp = '141833140000';\""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2023-01-13
    • 2017-10-02
    • 2017-05-22
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多