Ubuntu에서 Bash 프롬프트-호스트 이름 (\ h)과 동일한 FQDN (\ H)


14

우리는 개발, 테스트, 통합 및 준비를 위해 직장 내 별도의 환경을 갖추고 있습니다.

이러한 환경 내에서 우리는 DNS에 호스트 이름을 오버로드했습니다. 예를 들어 개발 환경에서는 기본 웹 시스템이 호출 web1.dev.example.com되고 테스트 환경에서 기본 웹 시스템은 web1.test.example.com입니다.

다른 환경에서 컴퓨터를 구별하기 위해 호스트 이름이 아닌 FQDN을 표시하도록 bash 프롬프트를 사용자 정의하고 싶습니다. 좋고 좋다; 나는 대체 할 수 있어야한다 \h\H$PS1, 그렇지? 흠. 그들은 똑같은 것을 보여줍니다.

me@web1:~$ hostname
web1
me@web1:~$ hostname -f
web1.dev.example.com
me@web1:~$ export PS1="\[\u@\h: \w\]\$ "
me@web1: ~$ export PS1="\[\u@\H: \w\]\$ "
me@web1: ~$ 

에서가 /etc/hostname, 나있어 단지 호스트 이름을 ( web1). hostname그리고 hostname -f모두 올바른 결과 ( "WEB1"및 "web1.test.example.com"을 각각) 반환, 나는 올바른 항목을 가지고있다 /etc/hosts.

무엇을 제공합니까?

차이가 있다면 우분투 10.04 호스트입니다.

답변:


18

명시 적 호출을 사용 hostname -f하여 시스템의 fqdn을 얻으십시오.

export PS1="\[\u@$(hostname -f): \w\]\$ "

예 :

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
iain@ub10-04-1.lan: ~$ 

편집하다:

추가 연구에 따르면 /etc/hostname(Ubuntu) 및 /etc/sysconfig/network(CentOS)의 내용이 관련성이 있습니다. FQDN이 파일에 있으면 \H올바르게 작동합니다.

그러나 Ubuntu의 hostname (1) 매뉴얼 페이지에서는 FQDN을 / etc / hostname에 넣지 말아야하지만 그 이유에 대한 이유는 없습니다.


그것은 좀 추악합니다. (하지만 작동합니다. 조금 더 열어두면 "깨끗한"수정을하는 것이 정말 좋을 것입니다.
Ben Williams

이것은 debian / ubuntu와 관련이있는 것 같습니다. 그것은 centos에서 예상대로 작동합니다.
user9517

1
네, 확실히 우분투 문제입니다. 나는 당신의 제안 된 솔루션을 사용하여 끝났습니다. 우분투에서 Bash에 대한 버그로 이것을보고해야합니다.
벤 윌리엄스

@ BenWilliams : 덜 모호한 것으로 답변을 업데이트했습니다.
user9517

또한 우분투의 호스트 이름 설정 문서에서 동일한 모호함을 발견했습니다. 해결 방법을 잘 모르겠습니다.
Dogweather

4

짧고 긴 호스트 이름에 대한 미친 듯이 많은 미친 짓이 있습니다. 항상 올바르게하는 것은 어렵 습니다. 따라서 FQDN을 호스트 이름으로 사용하는 모든 것을 포기하고 만들었습니다 ...

나는 내 환경에서 당신과 같은 일을하지만, 내가 어떤 사이트에 있는지 알고 있기 때문에 프롬프트에서 FQDN을 잘라 내고 공간을 절약합니다. 또한 환경에 따라 프롬프트를 색상으로 구분하여 "중요한"어딘가에있을 때 더 나은 경고를 받았습니다. 또한 다른 모든 것으로부터 경로를 공백으로 분리하여 파스타를 쉽게 복사 할 수 있습니다. 내 주식의 스 니펫 /etc/profile:

if hostname -f | grep -q '\.stg\.example\.com'; then
  _ROOT_COLOR=33  # yellow
  _USER_COLOR=36  # cyan
else
  _ROOT_COLOR=31  # red
  _USER_COLOR=32  # green
fi

if [ "`id -u`" -eq 0 ]; then
  PS1="\[\033[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w #\[\033[00m\] "
else
  PS1="\[\033[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w $\[\033[00m\] "
fi

그리고 "추악함"에 관한 한, 누가 프롬프트를 표시하는 코드가 어떻게 보이는지 신경 쓰는가? 어쨌든 대부분의 경우 쓰기 전용 코드입니다.


1
색상 사용량은 +1입니다.
Saad Masood

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