서버에 로그인했을 때 색상을 변경하라는 배쉬 프롬프트


15

서버에 로그인 할 때 색상이 변경되도록 bash 프롬프트를 동적으로 만드는 방법이 있습니까?

따라서 시스템에서 색상이 녹색으로 표시되고 서버에 연결되면 빨간색으로 변경되기를 원합니다. 나는 .bashrc모든 서버에 다른 것을 넣고 싶지 않은 엄청난 수의 서버를 가지고 있습니다 .


아마 아닙니다. 그러나 그것은 다시 superuser.com/questions/33712/…
임의

1
단말기를 연결할 때 기본 흰색을 얻도록 단말기를 빨간색 (또는 다른 색)으로 만드십시오.
Monica Monica 복원-ζ--

답변:


9

원격 프롬프트는 원격으로 설정됩니다 ~/.bashrc. 따라서 여전히 원격 서버에 복사해야합니다. 그러나 ~/.bashrc모든 호스트에 단일 을 사용하고 호스트 이름을 기반으로 프롬프트 색상을 설정할 수 있습니다 .

[ "$PS1" ] || return 0                           # continue only when interactive
case $(hostname -s) in
laptop*)
    prompt_color='\033[48;5;16m\033[38;5;46m'    # green(46) on black(16)
    ;;
server*)
    prompt_color='\033[48;5;16m\033[38;5;196m'   # red(196) on black(16)
    ;;
esac
ORIG_PS1=$PS1                                    # in case needed
PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset prompt_color

노트:

  • PS1아직 설정되지 않은 경우 (예 : 셸이 대화 형이 아닌 경우) 설정 하지 마십시오 . PS1비어 있지 않은지 테스트하는 것은 쉘이 대화식인지 여부를 결정하는 가장 일반적인 방법이며, 그렇게하는 프로그램을 혼동하고 싶지 않습니다. (보다 정확한 테스트는 $-포함 여부를 확인하는 것 i입니다.)

  • 원격 서버에 로그인 할 때이 코드를 실행하려면 항상 소스 프로파일 파일 중 하나가 있어야합니다 ~/.bashrc. 그러나 나는 당신이 그것을 알고 있다고 가정합니다.

  • 에서 PS1, 이스케이프 코드는 묶어야합니다 \[...\].

  • \[033[m전경과 배경을 기본값으로 재설정합니다. 여기 :\w에 터미널 전경 / 배경에 나타납니다.

  • \[033[48;5;XXXm\033[38;5;YYYm배경 / 전경을 XXX/로 설정합니다 YYY.

  • 사용 가능한 색상을 덤프하는 스크립트의 경우을 시도하십시오 colortest.

  • 프롬프트가 어떻게 보이는지 확인하려면 :

    echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "

7

리모컨에 별도의을 가지지 않으려면 ( PS1아니요) "아니오"라고 말하면 적어도 끔찍한 일입니다. SSH 연결에서 로컬 측은 쉘 프롬프트와 다른 것이 무엇인지 실제로 알지 못하므로 프롬프트의 색상 설정은 실제로 원격에서 가져와야합니다. 세션을 시작하기 전에 색상을 설정할 수 있지만 모든 출력에 효과적입니다. 즉, ls또는 편집자가 고유 한 색상을 설정할 때까지 유효합니다 .

물론 당신은 프롬프트처럼 보이는 모든 것을 감지하고 그것을 채색하기 위해 세션을위한 래퍼를 만들 수 있지만, 그것은 오탐 ( $?로 모든 줄의 색)을 쉽게 초래할 수 있습니다. 당신의 .profile또는 .bashrc각 기계에 단일 회선 .

여러 컴퓨터에서 모든 경우에 구성 변경을 동기화 할 솔루션을 검색하는 것이 유용 할 수 있습니다. 그것을 위해 만든 도구이거나 스크립트이거나 또는 구성 파일을 모두 복사하기 위해 루프를 실행하십시오.


2
마지막 단락이 핵심입니다. OP가 "대량의 서버"를 관리하는 경우 각 서버를 먼저 개별적으로 구성해야합니다.
Monica와의 가벼움 경주

5

먼저 sshpass와 함께 래퍼 스크립트를 사용하여 임시 프로필을 업로드 한 다음이 프로필을 사용하여 ssh를 작성하고 임시 파일을 삭제합니다.

스크립트의 두 가지 주요 사항은 다음과 같습니다.
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"

이를 사용하면 원격 세션의 색상을 쉽게 정의 할 수 있습니다.

이것이 귀하의 질문에 직접 대답하지는 않지만 문제를 해결하는 데 사용될 수 있음을 알고 있습니다.


3
sshpass -p가능하다면 사용하지 마십시오 ! 실행중인 프로그램에 대한 명령 줄 인수는 일반적으로의 모든 사용자에게 표시 ps되므로 암호도 마찬가지입니다. 기기에 다른 사용자 계정이 없더라도 실수로 화면에 인쇄 할 수 있습니다. sshpass사용하기 어려운 환경 변수에서 암호를 읽을 수 있습니다. 또한 로그인 자격 증명을 파일에 저장하려면 ssh 키를 고려하십시오.
ilkkachu

당신이 옳고 나는 그것을 사용하도록 홍보하려고하지 않았습니다. 방금 개발 목적으로 만 사용되며 보안 위험이없는 스크립트에서 예제로 붙여 넣었습니다. ssh 키가 사용되는 프로덕션 시스템의 경우 SSHPASS 변수가 비어 있습니다. 업데이트하겠습니다.
Mikael Kjær

1

당신은 관심에있을 수 있습니다 context-color내가 그 정확한 목적을 위해 함께 넣어했습니다 : https://github.com/ramnes/context-color

실행될 때 명령 출력의 해시를 기반으로 색상을 출력하는 간단한 스크립트입니다. 에 어딘가에 설치하면 $PATH다음과 같이 할 수 있습니다 .bashrc.

export PS1="$(context-color -p)$PS1\[\e[0m\]"

( --prompt/-p프롬프트에서 색상이 빠져 나가고 스위치가 색상 \[\e[0m\]을 다시 설정 하도록 스위치가있는 곳 )

기본적으로 해시를 생성하는 데 사용되는 명령은 whoami; hostname입니다. 호스트 이름에 따라 색상을 변경하려면 $CONTEXT변수 환경 ( export CONTEXT="hostname")을 변경 하거나 --context/-c옵션 ( context-color -c "hostname")을 사용하면 됩니다.

예를 들어 아래를 참조하십시오.

데모

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