如何逃脱|通过 SSH 运行 sed 时

如何逃脱|通过 SSH 运行 sed 时

我正在运行 sed 命令将字符串添加到文件中的一行: 这是原始行:

export JAVA_TOOL_OPTIONS="-Doption=Xyz"

它将更新为:

export JAVA_TOOL_OPTIONS="-Djava.net.useSystemProxies=false -Dhttp.nonProxyHosts=.abc.com|.abc1.com|localhost -Dhttps.proxyPort=443 -Doption=Xyz"

这是命令:

sed -i '1 s/export JAVA_TOOL_OPTIONS="/export JAVA_TOOL_OPTIONS="-Djava.net.useSystemProxies=false -Dhttp.nonProxyHosts=.abc.com|.abc1.com|localhost -Dhttps.proxyPort=443 /1 ' startup.sh

当它在服务器上的命令行上运行时,效果很好。但是,当通过 SSH 完成时,它无法运行:

ssh @hostname 'sed -i '1 s/export JAVA_TOOL_OPTIONS="/export JAVA_TOOL_OPTIONS="-Djava.net.useSystemProxies=false -Dhttp.nonProxyHosts=.abc.com|.abc1.com|localhost -Dhttps.proxyPort=443 /1 ' startup.sh'

我相信这与“|”有关。我什至尝试过使用 3 个反冲:

ssh @hostname 'sed -i '1 s/export JAVA_TOOL_OPTIONS="/export JAVA_TOOL_OPTIONS="-Djava.net.useSystemProxies=false -Dhttp.nonProxyHosts=.abc.com\\\|.abc1.com\\\|localhost -Dhttps.proxyPort=443 /1 ' startup.sh'

我更换了 |有 3 个间隙:

ssh @hostname 'sed -i '1 s/export JAVA_TOOL_OPTIONS="/export JAVA_TOOL_OPTIONS="-Djava.net.useSystemProxies=false -Dhttp.nonProxyHosts=.abc.com\\\.abc1.com\\\localhost -Dhttps.proxyPort=443 /1 ' startup.sh'

但它仍然失败了。知道我做错了什么吗?

答案1

ssh @hostname "$(cat <<'EOT'

sed -i ... # your command, verbatim

EOT
)"

相关内容