Bash 구성 파일이 소스를 가져오지 못함

Bash 구성 파일이 소스를 가져오지 못함

이전 명령이 성공하면 멋진 스마일리를 추가하고 터미널에서 명령이 성공하지 않으면 화난 스마일리를 추가하려고 합니다.

    21:26:30 user@mymachine:~ $ cat ~/.bash_profile
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/opt/[email protected]/bin:$PATH"
alias python=/usr/local/opt/[email protected]/bin/python3
alias pip=/usr/bin/pip3

highlightExitCode(){

    if [[ $? -eq 0 ]]; then
        echo -e '\xf0\x9f\x98\x8e ';
    else
        echo -e '\xf0\x9f\xa4\xa8 ';
    fi
}

export PS1="\[\033[1m\]\t\[\033[m\] \[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\] \$(highlightExitCode)\$ "

내 .bash_profile에 이 코드를 추가하고 가져오려고 했습니다. 그런데 이런 오류가 발생합니다.

21:30:45 user@mymachine:~ $ source ~/.bash_profile
-bash: /Users/user/.bash_profile: line 9: syntax error near unexpected token `then'
-bash: /Users/user/.bash_profile: line 9: `    if [[ $? -eq 0 ]]; then'

9행은 if 조건입니다. 대괄호나 ";"를 제거하는 다양한 조합을 시도했지만 운이 없었습니다. 내가 여기서 무엇을 놓치고 있는 걸까요?

bash 쉘을 실행 중입니다.

21:30:46 user@mymachine:~ $ echo $0
-bash

답변1

- 문이 포함된 줄의 시작 부분에 일부 보이지 않는 제어 문자(캐리지 리턴 제외)를 삽입하여 정확한 오류를 발생시킬 수 있습니다 if. 터미널에서 파일을 보면 해당 문자가 ^X(일부 대문자의 경우)로 나타납니다.Xcat -v

파일을 편집 vim하고 삭제하면 쉽게 캐릭터를 찾을 수 있을 수도 있고, 위 질문에서 간단하게 파일을 복사해서 붙여넣어 캐릭터를 제거해 볼 수도 있습니다.

문자는 Ctrl+V실수로 클릭(붙여넣기?)한 다음 다른 제어 시퀀스를 통해 삽입되었을 수 있습니다. 일부 편집기(예: vimvi) 및 쉘에서는 를 처음 누를 때 다음 문자를 그대로 삽입하여 원시 제어 문자를 삽입할 수 있습니다 Ctrl+V.

프롬프트 문자열을 자세히 살펴보지는 않았지만 PS1현재 쉘에서만 엄격하게 사용되므로 내보낼 필요가 없습니다. 다시 말하지만, PATH이미 환경 변수이므로 내보낼 필요가 없습니다 ( unset이전에 성공적으로 내보낸 적이 없는 경우).

큰 따옴표 대신 작은 따옴표를 사용하면 값 PS1에 이점을 줄 수 있으며 이스케이프 시퀀스에 쉘이 프롬프트 길이를 추적하지 못하게 하는 문제가 있지만 이것이 무엇인지 파악하려고 시도하지는 않았지만 그것은 스마일리 자체와 관련된 것일 수도 있습니다.

관련 정보