터미널 [username@machine /]$에서 굵은 글씨로 표시 할 수있는 일부 스크린 샷 (웹의 위치를 기억할 수 없음)에서 보았습니다 . 나는 항상 내 명령 후 첫 줄에 어려움을 찾기 위해 긴 출력을 스크롤하는 것을 알기 때문에 이것을 얻는 것을 고대하고 있습니다.
사용자 이름 등을 굵게 또는 채색하려면 어떻게해야합니까?
답변
파일 PS1에서 프롬프트 변수를 다음 ~/.bashrc과 같이 설정하여이를 수행 할 수 있어야합니다 .
PS1='[\u@\h \w]\$ '
컬러로 표시하려면 (대담한 경우-터미널 에뮬레이터가 활성화했는지 여부에 따라 다름) 이스케이프 컬러 코드를 추가해야합니다.
PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '
여기에서 1;91m와 0m부분 사이에서 이스케이프되지 않은 모든 항목 은 1;91색상 (빨간색)으로 표시됩니다. 이스케이프 코드를 프롬 프 트의 다른 부분 주위에 두어 다른 색을 사용하되, 색을 재설정 0m하거나 그렇지 않으면 터미널 출력을 채색해야합니다. 이후에 파일을 소싱하여 현재 쉘을 업데이트하십시오.source ~/.bashrc
답변
귀하의 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마지막 명령의 종료 상태입니다.

답변
이것은 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
참고 문헌 :
- 참조 
man bash및 확인PROMPTING절을 참조하십시오. - ANSI 이스케이프 코드-Wikipedia를 참조하십시오 .
 
답변
이 쉘 함수를 사용하여 터미널에서 텍스트 속성을 가져옵니다.
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
