"cat" 명령: 위반일 수 있는 모든 것을 자동으로 탈출하는 방법은 무엇입니까?

"cat" 명령: 위반일 수 있는 모든 것을 자동으로 탈출하는 방법은 무엇입니까?

내용을 복사하면

httpd.conf

그런 다음 cat 명령에 붙여넣으세요.. 이와 같은 ..

#!/bin/bash
cat > /test << EOF
pasted here..
EOF

다음 오류가 발생합니다.

-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 4: syntax error: unexpected end of file

아마도 해결책은 달러 기호나 따옴표 등을 피하는 것입니다.

하지만 이것이 매우 큰 파일이라는 점을 고려하면.. 달러 기호가 자동으로 이스케이프될 수 있습니까?

다른 프로그램을 통해 탈출한 다음 cat 명령에 제공하는 유일한 옵션입니까?

답변1

"EOF" 문자열 주위에 따옴표를 사용하십시오.

cat > /test <<'EOF'
stuff $(pwd)
EOF

출력

stuff $(pwd)

문자 그대로.

참조배쉬 매뉴얼heredocs에 있습니다. 종결자 문자열의 따옴표는 본문의 확장 및 대체를 방지합니다.

답변2

다음 예에서 두 개의 여기 문서를 비교하십시오.

(yeti@darkstar:6)~/wrk/tmp$ cat ./xyzzy 
#!/bin/bash
cat << EOF
Version 1 - Today is $(date)
EOF
cat << 'EOF'
Version 2 - Today is $(date)
EOF
(yeti@darkstar:6)~/wrk/tmp$ ./xyzzy 
Version 1 - Today is Sa 21. Jun 08:51:38 CEST 2014
Version 2 - Today is $(date)

관련 정보