2013-04-28 52 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 &\""

基本上,你需要每次在一個又一個嵌​​入此命令時逃脫雙引號,反引號和反斜槓的命令。除了較低級別之外,我沒有使用單引號,因爲您不能在單引號內使用轉義的單引號。

你也需要轉義$,即使字符串中還包含單引號,它也只是用雙引號引起來的字符串中的一個字符。