我在脚本中使用以下命令:
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
有人可以帮助我解决问题吗?
实际上,在这种特殊情况下不需要外部引号。
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}'""
这里的文档会很有用
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
尝试使用转义引号执行以下命令:
ssh user@<ip> "ssh user1@<ip1> "df -k /local/ | awk '{print $4}' | tail -1""