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

관련 정보