Bash 도구에서 컬러 출력이 없습니다. 그리고 정말 불편해요. (그런데, bash
색상 팁과 같은 색상도 나 자신에게 있습니다 ).
나는 달렸을 때 /usr/bin/bash
색이 다시 돌아온 것을 발견했습니다. (단, 별칭, 경로 등 프로필 설정이 없습니다.)
여기서 볼 수 있는 유일한 차이점은 --login
로고입니다. 문제의 원인은 bash가 처음에 플래그를 사용하여 --login
구성 파일을 로드한다는 것입니다.
그러나 그것은 무엇입니까?
답변1
/usr/bin/bash를 실행했을 때 색상이 다시 나타나는 것을 확인했습니다. (단, 별칭, 경로 등 프로필 설정이 없습니다.)
분명히 이러한 것들을 설정하는 명령은 실행됩니다아니요- 로그인 쉘.
대화형 로그인 쉘은 다른 대화형 쉘과 다른 시작 스크립트를 사용합니다.
컬러 출력을 설정하는 명령은 .bashrc
홈 디렉토리의 파일에 있거나 시스템 전체에 있을 수 있습니다 /etc/bash.bashrc
. 이러한 파일의 명령은 대화형 쉘에 대해 실행됩니다.아니요로그인 셸. 그러나 명령이 다른 시작 스크립트 소스에 있지 않으면 대화형 로그인 셸에서 실행되지 않습니다 .bashrc
. 이 파일들을 확인해야 합니다.
bash
로그인 셸로 시작 되면 홈 디렉터리에 있는 , 및 의 첫 /etc/profile
번째 명령을 실행합니다. 자세한 내용을 보려면 실행하세요 ..bash_profile
.bash_login
.profile
man bash
비대화형 로그인 셸에서도 프로필 파일의 명령이 실행될 수 있으며 해당 설정에 색상을 지정하고 싶지 않을 수 있으며 그렇게 하면 오류가 발생할 수도 있습니다. 특히 대부분의 데스크탑 환경은 파일 에서 .profile
명령을 실행합니다 . 따라서 프로필 파일에 색상화 명령을 추가하는 경우 해당 명령을 다음에서만 사용할 수 있도록 하는 것을 고려해야 합니다.인터렉티브껍데기. 또한 일부 명령은 다른 셸에서만 실행될 수 bash
있고 다른 셸에서는 실행될 수 없으므로 이것이 그대로 유지되는지 확인해야 합니다(아래 참조).
쉘이 대화형인지 확인하는 한 가지 방법은 PS1
프롬프트 변수가 존재하고 비어 있지 않은지 확인하는 것입니다. 비대화형 로그인 쉘의 경우에도 실행하려는 명령 뒤, 대화형 쉘에서 실행하려는 명령 앞에 이 명령을 프로필 파일에 배치할 수 있습니다.
[ -z "$PS1" ] && return
때로는 상호작용성 검사가 "rc" 파일에 있을 수도 있습니다.
일부 운영 체제에서는데비안과 우분투를 포함합니다, 기본값 .profile
( /etc/skel/
사용자 계정이 생성될 때 복사됨) 소스 - 즉, -에서 모든 명령을 실행합니다 .bashrc
. 다시 말하지만, /etc/profile
소스 /etc/bash.bashrc
. 그러나 기본 셸을 사용하는 모든 운영 체제가 bash
이 작업을 수행하는 것은 아닙니다. 어쩌면 귀하의 시스템에 없을 수도 있습니다.
해당 시스템에는 기본적으로 다음과 같은 줄이 .bashrc
있습니다 ./etc/bash.bashrc
다른 명령보다 먼저 맨 위에. 특히 쉘이 다르게 상호 작용하는지 확인 /etc/bash.bashrc
하면서 해당 행을 정확하게 유지하십시오 ..bashrc
case $- in
*i*) ;;
*) return;;
esac
이는 대화형 셸에 특수 매개변수가 bash
있기 때문에 작동합니다 . 나는 당신이 이런 식으로 확인하는 것을 선호할 경우를 대비하여 주로 언급합니다.i
$-
때때로"config file"에서 "rc"를 조건부로 가져오는 것이 합리적입니다.
.bashrc
예를 들어, 상황에 따라 데비안처럼 홈 디렉토리에 "프로필" 파일을 저장하고 싶을 수도 있습니다 . 이 작업은 실제로 모든 파일에 무엇이 있는지에 따라 달라지기 때문에 이렇게 하라고 조언할 수 없습니다. 하지만 데비안과 우분투는 이렇게 합니다:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
의 명령은 .bashrc
일반적으로 에서만 실행할 수 bash
있으므로 다른 셸에서 실수로 명령을 실행하지 않도록 설정해서는 안 됩니다. 이것이 위의 코드가 달성하는 것입니다. .bash_profile
or 에서는 and 만 사용되기 때문에 대체 .bash_login
할 수 있습니다 . 하지만 에서는. "$HOME/.bashrc"
bash
.bash_profile
.bash_login
.profile
아니요. "$HOME/.bashrc"
대부분의 데스크탑 환경 외에 다른 쉘에서도 명령을 실행하기 때문에 보호되지 않는 것이 있습니다 .bash
.profile
소스 코드를 만들기로 결정했다면 /etc/profile
비슷한 주의를 기울여야 합니다 /etc/bash.bashrc
. 모든 경우에 내장 함수를 사용하여 다른 시작 스크립트에서 시작 스크립트를 가져올 때 .
( source
및 .
에서 source
상호 교환 가능 bash
) 한 파일이 다른 파일의 소스를 가져오는 무한 루프를 생성하지 않도록 해야 합니다. 다른 A 파일은 원본 파일의 소스를 가져옵니다.
어떻게 해야 할까요...
...귀하가 제공한 정보에 따르면 위에 언급된 파일 중 실제로 어떤 파일이 있고 그 파일에 무엇이 포함되어 있는지 모르기 때문에 확신할 수 없습니다.
제가 제공한 설명은 여러분이 어떤 변경 사항을 적용해야 할지 파악하는 데 충분할 것이라고 생각합니다. 그러나 여러분은 실제로 어떤 명령이 로그인 쉘과 비로그인 쉘에서 나오는지 /etc/bash.bashrc
, 또는 .bashrc
어떤 명령을 로그인 쉘에서 실행하려는지 확신할 수 없습니다. 및 비로그인 쉘, 그리고 비로그인 쉘에만 예약하려는 명령. (또는 그 중 일부 - 환경 변수 설정과 같은 PATH
- 그냥 실행하고 싶을 수도 있습니다.로그인껍데기. )
따라서 이러한 이유로든 다른 이유로든 더 자세한 답변을 원한다면 해당 정보(완전하고 정확한 텍스트와 함께 가지고 있는 각 파일의 이름)를 제공하도록 질문을 편집하는 것이 좋습니다. (이 문제에 대해 도움을 원하는 다른 사용자는 확실히아니요이 질문을 편집하세요. 하지만 먼저 검색하여 해결 방법을 찾지 못한 경우 새 질문을 게시해야 합니다. )