--bash의 로그인 옵션에는 컬러 출력이 없습니다.

--bash의 로그인 옵션에는 컬러 출력이 없습니다.

Bash 도구에서 컬러 출력이 없습니다. 그리고 정말 불편해요. (그런데, bash색상 팁과 같은 색상도 나 자신에게 있습니다 ).

나는 달렸을 때 /usr/bin/bash색이 다시 돌아온 것을 발견했습니다. (단, 별칭, 경로 등 프로필 설정이 없습니다.)

여기서 볼 수 있는 유일한 차이점은 --login로고입니다. 문제의 원인은 bash가 처음에 플래그를 사용하여 --login구성 파일을 로드한다는 것입니다.

그러나 그것은 무엇입니까?

답변1

/usr/bin/bash를 실행했을 때 색상이 다시 나타나는 것을 확인했습니다. (단, 별칭, 경로 등 프로필 설정이 없습니다.)

분명히 이러한 것들을 설정하는 명령은 실행됩니다아니요- 로그인 쉘.

대화형 로그인 쉘은 다른 대화형 쉘과 다른 시작 스크립트를 사용합니다.

컬러 출력을 설정하는 명령은 .bashrc홈 디렉토리의 파일에 있거나 시스템 전체에 있을 수 있습니다 /etc/bash.bashrc. 이러한 파일의 명령은 대화형 쉘에 대해 실행됩니다.아니요로그인 셸. 그러나 명령이 다른 시작 스크립트 소스에 있지 않으면 대화형 로그인 셸에서 실행되지 않습니다 .bashrc. 이 파일들을 확인해야 합니다.

bash로그인 셸로 시작 되면 홈 디렉터리에 있는 , 및 의 첫 /etc/profile번째 명령을 실행합니다. 자세한 내용을 보려면 실행하세요 ..bash_profile.bash_login.profileman 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_profileor 에서는 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- 그냥 실행하고 싶을 수도 있습니다.로그인껍데기. )

따라서 이러한 이유로든 다른 이유로든 더 자세한 답변을 원한다면 해당 정보(완전하고 정확한 텍스트와 함께 가지고 있는 각 파일의 이름)를 제공하도록 질문을 편집하는 것이 좋습니다. (이 문제에 대해 도움을 원하는 다른 사용자는 확실히아니요이 질문을 편집하세요. 하지만 먼저 검색하여 해결 방법을 찾지 못한 경우 새 질문을 게시해야 합니다. )

관련 정보