터미널 디스플레이 user @ machine을 굵은 글씨로 만드는 방법은 무엇입니까?


31

터미널 [username@machine /]$에서 굵은 글씨로 표시 할 수있는 일부 스크린 샷 (웹의 위치를 ​​기억할 수 없음)에서 보았습니다 . 나는 항상 내 명령 후 첫 줄에 어려움을 찾기 위해 긴 출력을 스크롤하는 것을 알기 때문에 이것을 얻는 것을 고대하고 있습니다.

사용자 이름 등을 굵게 또는 채색하려면 어떻게해야합니까?


bash 쉘 또는 다른 쉘을 사용하고 있는지 명확히 할 수 있습니까?
Stephen Quan

그놈 터미널 bash.
Benjamin

답변:


22

파일 PS1에서 프롬프트 변수를 다음 ~/.bashrc과 같이 설정하여이를 수행 할 수 있어야합니다 .

PS1='[\u@\h \w]\$ '

컬러로 표시하려면 (대담한 경우-터미널 에뮬레이터가 활성화했는지 여부에 따라 다름) 이스케이프 컬러 코드를 추가해야합니다.

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

여기에서 1;91m0m부분 사이에서 이스케이프되지 않은 모든 항목 은 1;91색상 (빨간색)으로 표시됩니다. 이스케이프 코드를 프롬 프 트의 다른 부분 주위에 두어 다른 색을 사용하되, 색을 재설정 0m하거나 그렇지 않으면 터미널 출력을 채색해야합니다. 이후에 파일을 소싱하여 현재 쉘을 업데이트하십시오.source ~/.bashrc


왜 빨간색으로 31을 사용하지 않습니까? 91은 표준 코드가 아닌 것 같습니다.
jw013

1
@ jw013 90-97 범위는 굵은 체로 사용되는 경우 30-37 범위 1;31와 같습니다 1;91. 일반적인 글꼴 무게를 사용하면 90-97 범위가 다른 글꼴보다 더 밝은 색상을 제공합니다.

45

귀하의 PS1설정 위치를 찾아 시작과 끝에 .bashrc삽입 하십시오 . '\[\e[1m\]'\[\e[0m\]

  • \[\]쉘이 엉망 내부 라인 편집을 할 때 일부 망쳐 행위를 방지 화면에 0 공간을 차지 알 수 있도록 필요합니다. 당신은 그것에 대해 너무 걱정할 필요가 없습니다.
  • \e[CSI (제어 서열 도입기)로 알려져있다. 참조 된 Wikipedia 페이지에 나열된 대부분의 코드에서 사용 된 것을 볼 수 있습니다. \e 이스케이프 문자를 의미합니다.
  • Wikipedia 페이지의 SGR 표를 보면 1은 밝은 / 굵은 글자의 숫자이고 0은 재설정 된 것입니다. 따라서 CSI 1m굵게 표시하고 CSI 0m글꼴을 재설정하여 나머지 텍스트는 정상입니다.

Wikipedia에는 터미널 에뮬레이터가 지원하는 경우 사용할 수있는 ANSI 이스케이프 코드 의 전체 목록 이 있습니다.

편집하다

이식성과 가독성을 tput위해 이스케이프 코드를 하드 코딩 하는 대신 사용해야 합니다. 유일한 단점은 tputANSI 코드를 지원하지만 terminfo 데이터베이스가 손상되거나 누락 된 터미널 에서는이 방법이 작동하지 않지만, terminfo에 의존하는 많은 콘솔 앱이 제대로 작동하지 않을 수 있기 때문에 깨진 terminfo가 더 큰 문제입니다.

다음은 내가하는 일의 예입니다 .bashrc.

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

일반화 된 버전의 모습은 다음과 같습니다. 는 0마지막 명령의 종료 상태입니다.

PS1 스크린 샷


친절하고 설명적인 대답, +1. 여전히 나는 헤세 의 대답을 요점까지 더 많이 찾았 으므로 대신 그것을 선택했다.
Benjamin

이것을 시도했을 때 터미널 프롬프트가 올바르게 줄 바꿈되지 않는 문제가 발생했습니다 . 당신 은요? 이스케이프 시퀀스를 업데이트 했습니까?
Stefan Lasiewski 1

6

이것은 cygwin bash 쉘에서 기본 프롬프트입니다.

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

여기에 이미지 설명을 입력하십시오

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

참고 문헌 :


[user @ host] 앞에 새 줄을 추가하여 각 명령을 더 읽기 쉽게 만들었습니다 (기본적으로 터미널 imo에서 설정해야 함).
Benjamin

2

이 쉘 함수를 사용하여 터미널에서 텍스트 속성을 가져옵니다.

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

그런 다음 사용하십시오.

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

이 날 준다 굵은 녹색과 굵은 파란색입니다.[username@hostname]:cwd>username@hostnamecwd


고마워 나는 또한 위의 모든 것을 복사해야한다고 생각 ~/.bashrc합니까?
Benjamin

예, ~/.bashrc파일에 설정하고 프롬프트를 설정하는 데 사용합니다. 사용중인 시스템에 따라 색상이 변경되기도합니다.
Arcege

1

기본 우분투 프롬프트처럼 보이게하려면

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

당신의 ~/.bashrc.

이렇게하면 잘 알려진 녹색 user@host(굵게), 굵지 않은 흰색 콜론, 굵은 파란색으로 된 작업 디렉토리, $기호, 공백 및 굵지 않은 흰색 문자로 된 명령이 생성됩니다.

우분투 배쉬 프롬프트

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.