이 문서에서 "$"를 인쇄하는 방법

이 문서에서 "$"를 인쇄하는 방법

Bash에서 이 문서의 "$"를 어떻게 에코합니까?

예를 들어, $ABC=home_dir.

$ ssh hostname sudo -s <<EOF
echo "$ABC=home_dir" > file
EOF

하지만 변수로 처리됩니다. 텍스트를 인쇄하는 방법은 무엇입니까 $?

답변1

이를 문서화하고 문서 내용이 확장되거나 특수 문자가 해석되는 것을 원하지 않는 경우 다음과 같이 작은따옴표로 태그를 인용할 수 있습니다.

$ cat >file <<'EOF'
echo "$ABC=home_dir"
EOF

그러나 예제에 설명된 상황은 실제로 ssh를 통해 이 콘텐츠를 sudo에 의해 실행되는 원격 시스템으로 전송하기 때문에 더 복잡합니다. 이 시스템은 셸도 호출합니다(따라서 셸도 콘텐츠를 확장합니다). 이를 올바르게 수행하려면 몇 가지 수준의 인용이 더 필요하지만 sudo에는 터미널이 필요하고(비밀번호를 요청할 수 있음) 표준 입력에서 리디렉션되기 때문에 작동하지 않습니다. 여기서는 그것을 사용해도 ssh -t도움이 되지 않습니다.

나도 존의 말에 동의한다. 이것이 실제로 원하는 것인지는 확실하지 않습니다. 쉘 변수 참조에 값을 할당하는 것은 합법적이지 않으므로 생성하려는 이 파일이 쉘 스크립트인 경우에는 원하는 작업을 수행하지 않습니다. 설명 그런 식으로 작동합니다. 어쩌면 한발 물러서서 자신의 상황을 설명했다면진짜더 많은 일을 하고 싶다면 더 많은 도움을 드릴 수 있습니다.

답변2

도망가다$

$ ssh hostname sudo -s <<EOF
echo "\$ABC=home_dir" > file
EOF

귀하의 사용 사례가 무엇인지는 모르지만 일반적으로 home_dir=$ABC대신 $ABC=home_dir.

답변3

가장 저렴하게 탈출하는 방법은

$ ssh hostname sudo -s << \EOF
echo "$ABC=home_dir" > file
EOF

답변4

cat원격 측 프로세스 에 문자열을 보내어 일정량의 인용을 저장할 수 있습니다.

echo 'echo $ABC=home_dir' | ssh hostname sudo -s "cat > file"

작은 따옴표는 $로컬 측을 보호하고 다른 측의 쉘은 문자열을 다른 쉘 명령에 대한 인수로 사용하는 대신 cat(를 통해 ) 직접 읽으므로 문자열을 볼 수 없습니다.sudo

코드의 경우 보호를 위해 추가 이스케이프 계층이 필요합니다 $.

$ ssh hostname sudo -s <<EOF
echo "\\\$ABC=home_dir" > file
EOF

\$원격 쉘이 텍스트를 $파일 에 쓸 수 있도록 원격 호스트에 텍스트를 보내야 합니다 . here-doc 태그를 참조하여 이를 단순화할 수도 있습니다.

$ ssh hostname sudo -s <<\EOF
echo "\$ABC=home_dir" > file
EOF

관련 정보