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