【问题标题】:very complex quotes in python/shell stringpython / shell字符串中非常复杂的引号
【发布时间】:2013-04-28 20:20:45
【问题描述】:

我有一个很长的 ssh_cmd 字符串,我从这里得到的

cmd = """kill -9 `ps -ef|grep "udp_receiver"|grep -v "grep"|awk '{print $2}'`"""
HostName="133.33.22.1"
ssh_cmd = """ssh -t inria_spoofing@{0} 'sudo nohup bash -c "{1} > /nohup.out 2>&1 &"'""".format(HostName, cmd)

结果ssh_cmd 是:

ssh -t kitty@133.33.22.1 'sudo nohup bash -c "kill -9 `ps -ef|grep "udp_receiver"|grep -v "grep"|awk '{print $2}'` > /nohup.out 2>&1 &"'

但是,我害怕当我跑步时

child = pexpect.spawn(ssh_cmd)

有问题, 那么如何组织字符串呢? 谢谢!

【问题讨论】:

  • 结果字符串不是正确的shell字符串
  • 我建议你将小的 shell 文件复制到目标机器上的 /tmp 并执行它,而不需要所有这些带引号的噩梦。
  • 看起来你正在解决错误的问题。为什么需要这样做?
  • 是否使用fabric 选项?

标签: python bash shell expect pexpect


【解决方案1】:

要回答这个问题,这里是正确的ssh_cmdssh -t kitty@133.33.22.1 "sudo nohup bash -c \"kill -9 \\\`ps -ef | grep 'udp_receiver' | grep -v 'grep' | awk '{print \\\$2}'\\\` > /nohup.out 2>&1 &\""

基本上,每次将命令嵌入另一个命令时,都需要在命令中转义双引号、反引号和反斜杠。除了在较低级别之外,我没有使用单引号,因为您不能在单引号内使用转义的单引号。

$ 只是用双引号引起来的字符串中的一个字符时,您也需要转义它,即使该字符串也包含单引号。

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 2019-06-27
    • 1970-01-01
    • 2017-12-19
    • 2010-12-21
    • 2018-12-08
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多