이전 명령이 성공하면 멋진 스마일리를 추가하고 터미널에서 명령이 성공하지 않으면 화난 스마일리를 추가하려고 합니다.
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
(일부 대문자의 경우)로 나타납니다.X
cat -v
파일을 편집 vim
하고 삭제하면 쉽게 캐릭터를 찾을 수 있을 수도 있고, 위 질문에서 간단하게 파일을 복사해서 붙여넣어 캐릭터를 제거해 볼 수도 있습니다.
문자는 Ctrl+V실수로 클릭(붙여넣기?)한 다음 다른 제어 시퀀스를 통해 삽입되었을 수 있습니다. 일부 편집기(예: vim
및 vi
) 및 쉘에서는 를 처음 누를 때 다음 문자를 그대로 삽입하여 원시 제어 문자를 삽입할 수 있습니다 Ctrl+V.
프롬프트 문자열을 자세히 살펴보지는 않았지만 PS1
현재 쉘에서만 엄격하게 사용되므로 내보낼 필요가 없습니다. 다시 말하지만, PATH
이미 환경 변수이므로 내보낼 필요가 없습니다 ( unset
이전에 성공적으로 내보낸 적이 없는 경우).
큰 따옴표 대신 작은 따옴표를 사용하면 값 PS1
에 이점을 줄 수 있으며 이스케이프 시퀀스에 쉘이 프롬프트 길이를 추적하지 못하게 하는 문제가 있지만 이것이 무엇인지 파악하려고 시도하지는 않았지만 그것은 스마일리 자체와 관련된 것일 수도 있습니다.