원격 서버에서 스크립트를 실행하고 스크립트를 마지막 매개변수로 전달하려고 합니다.
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
`"
백틱 주위의 큰따옴표가 올바른 접근 방식입니까?