heredoc 또는 기타 기술을 사용하여 단일 문자열 매개변수 생성

heredoc 또는 기타 기술을 사용하여 단일 문자열 매개변수 생성

원격 서버에서 스크립트를 실행하고 스크립트를 마지막 매개변수로 전달하려고 합니다.

ntrs exec-all-ubuntu --exec `cat << 'EOF'

  echo "$(pwd)"
  echo "$foobar"

EOF`

이것질문텍스트에 있는 값은 별도의 매개변수로 전송되는데 echo가 첫 번째 매개변수이고 pwd 값이 두 번째 별도 매개변수인데 문자열로 하나의 매개변수만 원합니다.

매개변수는 다음과 같이 표시됩니다.

[ '--exec', 'echo', '"$(pwd)"', 'echo', '"$foobar"' ]

하지만 나는 개행 문자가 포함된 문자 그대로의 콘텐츠를 찾고 있습니다.

[ '--exec', '   echo "$(pwd)"\n\n echo "$foobar"\n ' ]

나는 또한 이것을 사용해 보았습니다.

ntrs exec-all-ubuntu --exec `read -d << EOF
    select c1, c2 from foo
    where c1='something'
EOF`

하지만 문자열이 비어 있습니다

답변1

개행 문자가 포함된 일반 문자열을 간단히 사용할 수 있습니다.

ntrs exec-all-ubuntu --exec '
  echo "$(pwd)"
  echo "$foobar"
'

답변2

매뉴얼 페이지에서 bash(1):

The format of here-documents is:

      [n]<<[-]word
              here-document
      delimiter

No parameter and variable expansion, command substitution, arithmetic
expansion, or pathname expansion is performed on word.  If any part of
word is quoted, the delimiter is the result of quote removal on word,
and the lines in the here-document are not expanded.

귀하의 게시물이 태그되었으므로나는 다음을 추천한다:

ntrs exec-all-ubuntu --exec "$(cat << 'EOF'

  echo "$(pwd)"
  echo "$foobar"

EOF
)"

마침내,

echo "$(pwd)"

간단히 말해서 더 나을 수도 있습니다.

pwd

답변3

Jim L.의 말이 맞습니다. 하지만 더 쉬운 방법이 있을까요?

ntrs exec-all-ubuntu --exec "`cat << 'EOF'

  echo "$(pwd)"

  echo "$foobar"

EOF
`"

백틱 주위의 큰따옴표가 올바른 접근 방식입니까?

관련 정보