我在脚本中使用以下命令:
ssh user@<ip> "ssh user1@<ip1> 'df -k /local/ | awk '{print \$4}' | tail -1'"
所以它会在特殊字符'$'时转义,但它会在第二个服务器中发送如下命令:
debug1: Sending command: df -k /local/ | awk {print } | tail -1
awk: cmd. line:1: {print
awk: cmd. line:1: ^ unexpected newline or end of string
有人可以帮我解决问题吗?
答案 0 :(得分:1)
这里的文件很有用
ssh user@<ip> <<EOIP
ssh user1@<ip1> <<EOIP1
df -k /local/ | awk '{print \$4}' | tail -1
EOIP1
EOIP
如果第二台服务器要求输入密码,那么这不会起作用,而是使用sshpass
提供密码
ssh user@<ip> <<EOIP
sshpass -p password ssh user1@<ip1> <<EOIP1
df -k /local/ | awk '{print \$4}' | tail -1
EOIP1
EOIP
答案 1 :(得分:1)
实际上,在这种特殊情况下不需要外部引号。
ssh user@<ip> ssh user1@<ip1> "df -k /local/ | awk '{print \$4}' | tail -1"
但也没有理由在远程主机上运行后处理。
ssh user@<ip> ssh user1@<ip1> df -k /local/ | awk '{print $4}' | tail -1
您还可以优化tail
:
ssh user@<ip> ssh user1@<ip1> df -k /local/ | awk '{x=$4}END{print x}'
在一般情况下,如果你需要混合双引号和单引号,你可以在双引号内反斜杠转义双引号,但单引号内的单引号是不可能的。
ssh user@<ip> "ssh user1@<ip1> \"df -k /local/ | awk '{x=\$4}END{print x}'\""
答案 2 :(得分:0)
使用转义引号尝试此命令:
ssh user@<ip> "ssh user1@<ip1> \"df -k /local/ | awk '{print \$4}' | tail -1\""