我正在运行 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
)"