2013-04-28 40 views
1

我有一个很长的字符串ssh_cmd,我把它从在python /壳字符串非常复杂的报价

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

所得ssh_cmd是:

ssh -t [email protected] '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) 

有问题,所以 如何组织的字符串? 谢谢!

+0

什么问题? – Linuxios 2013-04-28 20:40:21

+0

结果字符串不是一个正确的shell字符串 – misteryes 2013-04-28 20:52:04

+2

我建议你将小shell文件复制到目标机器上的/ tmp,并在没有所有此引用的情况下执行它。 – rvs 2013-04-28 21:45:11

回答

0

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

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

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