파일의 줄에 문자열을 추가하기 위해 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
)"