转义命令参数中的特殊字符



我在脚本中使用以下命令:

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""

最新更新