쉘 명령의 Heredoc 출력에 백틱(`) 추가

쉘 명령의 Heredoc 출력에 백틱(`) 추가

PS1="..."설정 중인 쉘 스크립트에 cmd 프롬프트 수정자를 추가해야 합니다. 문제는 백틱을 사용하여 주 명령 전에 명령을 실행한다는 것입니다.

sudo tee ~/.bashrc <<EOF

# Display absolute path in cmd line, cmds on new line
PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h [\u]\[`tput sgr0`\]:$PWD\n\$ '

EOF

cat ~/.bashrc다음을 제공합니다:

# Display absolute path in cmd line, cmds on new line
PS1='\[\]\h [\u]\[\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

nano ~/bashrc다음을 제공합니다:

PS1='\[^[[32m\]\h [\u]\[^[(B^[[m\]:/Users/myuser/Library/Application Support/Sublime Text 3/Packages/User\n$ '

이는 분명히 백틱 안의 모든 내용이 올바르게 읽혀지지 않았음을 의미합니다. 백틱을 이스케이프 처리하거나 쉘을 사용하여 백틱이 포함된 줄을 파일에 쓰려면 어떻게 해야 합니까?

답변1

여기 문서에서 작성하는 동안 쉘은 다음을 수행합니다.매개변수 확장( $PWD예: 스크립트를 구문 분석할 때 현재 디렉터리로 확장되는 경로)명령 대체(이 문서를 구문 분석할 때 "백틱"이 수행되고 이 명령으로 생성된 모든 내용이 해당 위치에 삽입됩니다.)산술 확장(귀하의 경우도 마찬가지입니다).

이를 원하지 않는 경우, 즉 이 문서의 내용을 있는 그대로 전달하려는 경우 다음을 수행할 수 있습니다.

tee -a "$HOME/.bashrc" <<'EOF'

# contents of here-document here

EOF

첫 번째 줄 주위의 아포스트로피는 EOF쉘이 문서 자체의 어떤 것도 확장하는 것을 방지합니다.

관련 정보