이스케이프된 따옴표 내에서 따옴표를 이스케이프하는 것이 가능합니까?

이스케이프된 따옴표 내에서 따옴표를 이스케이프하는 것이 가능합니까?

내가 하고 싶은 것은 내에서 명령을 실행하는 것입니다.

su - someuser -c "ssh someplace \"if ( ! grep <b>[WHAT DO I PUT HERE?]</b>some thing<b>[WHAT DO I PUT HERE]</b> /etc/somefile ); then doSomething; fi\""

나를 혼란스럽게 하는 문자열을 grep하는 것은 그 따옴표입니다. 이제 공백 없이 콘텐츠를 grep하여 문제를 해결하겠습니다. 그러나 grep하려는 항목을 grep하는 것이 좋습니다.

답변1

3개의 따옴표를 추가하는 것은 작동하지 않습니다. 인용 해제, 인용 및 다시 인용 해제만 가능합니다. 서브 쉘도 필요하지 않습니다.

당신이 정말로 원하는 것은:

su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'

이 접근 방식은 빠르게 다루기 어려워질 수 있습니다. 서버에 스크립트를 배치하고 실행하는 것을 고려해 보십시오. 이렇게 하면 중첩된 참조 지옥에서 벗어날 수 있습니다.

답변2

여기에 있는 문서를 사용하면 됩니다.

su -someuser -c '<&1 >&2 ssh you@machine sh' 1<<\SCRIPT
    if   ! grep 'some spaces or whatever' /etc/somefile
    then : do something
    fi
#END
SCRIPT

su에서 읽은 초기 비밀번호를 전달해야 하고 su2보다 큰 파일 설명자를 전달하지 않기 때문에 이 솔루션에는 약간의 fd 저글링이 필요합니다. 그러나 일단 인증하면 sui ssh/o를 망치지 않으므로 즉시 재할당하고 다른 쪽 끝에서 호출된 셸이 stdin을 읽도록 할 수 있습니다.

관련 정보