이 질문은 모범 사례에 관한 것입니다. 보안 셸을 통해 로그인하거나 사용자를 전환하는 것을 알고 su
있으며 su -l
효과가 다릅니다. 또한 구성에 오타가 있어도 계속 로그인할 수 있기를 원합니다. 색상 정의를 저장하기에 이상적인 장소는 어디입니까? 지금까지 나는 그것들을 거기에 넣었습니다 .bash_profile
. 에 저장할 수 있나요 .bashrc
?
구성 위치:
ArchWiki에 따르면
/etc/profile
소스 응용 프로그램은/etc/profile.d/*.sh
및 에 설정되어 있습니다/etc/bash.bashrc
.~/.bash_profile
그 이후에는 사용자별로/etc/profile
.~/.bash_login
(.bash_profile
발견되지 않은 경우)~/.profile
(.bash_profile
발견되지 않은 경우)/etc/skel/.bash_profile
소스 도 있습니다~/.bashrc
.~/.bash_logout
/etc/bash.bashrc
-DSYS_BASHRC="/etc/bash.bashrc"
컴파일 플래그 에 따라 다릅니다 . 원천/usr/share/bash-completion/bash_completion
~/.bashrc
그 이후에는 사용자별로/etc/bash.bashrc
.
이를 저장해 보겠습니다. 두 가지 색상 정의가 있습니다. 하나는 명령 프롬프트용이고 다른 하나는 명령용입니다 ls
.
set_prompt () {
Last_Command=$? # Must come first!
Blue='\[\e[01;34m\]'
White='\[\e[01;37m\]'
Redbold='\[\e[01;31m\]'
Greenbold='\[\e[01;32m\]'
Greenlight='\[\e[00;32m\]'
Blueintense='\[\033[00;96m\]'
Purplelight='\[\e[00;35m\]'
Yellowbold='\[\e[01;33m\]'
Graydark='\[\e[01;90m\]'
Reset='\[\e[00m\]'
FancyX='\342\234\227'
Checkmark='\342\234\223'
PS1="${Graydark}\t "
if [[ $Last_Command == 0 ]]; then
PS1+="$Greenlight$Checkmark "
else
PS1+="$Redbold$FancyX "
fi
if [[ $EUID == 0 ]]; then
PS1+="\\u@$Redbold\\h "
else
PS1+="$Greenlight\\u$White@$Redbold\\h "
fi
PS1+="$Graydark\\W $Redbold\\\$$Reset "
}
PROMPT_COMMAND='set_prompt'
set_ls () {
Default='0;0'
White='97'
Yellowbold='01;33'
Greenlight='00;32'
Purplelight='00;35'
Purplebold='01;35'
Whitelight='00;37'
Yellowlight='00;33'
Graydark='00;90'
# Highlight
Highlightpurpledark='45'
Highlightgraydark='100'
LS_COLORS="fi=$Greenlight:di=$White;$Highlightgraydark:*.tex=$Purplebold"
export LS_COLORS
}
set_ls
답변1
환경 변수를 .bash_login 또는 .bash_profile에 넣을 것입니다. 왜냐하면 (내보낼 때) 서브셸에 상속되고 각 셸에 대해 재설정할 필요가 없기 때문입니다. 실제로 재설정하는 데 비용이 많이 드는 것은 아니지만, 서브셸 중에 환경 변수를 다른 것으로 설정하려는 경우를 대비해서입니다. .bashrc가 설정을 재정의하는 경우 이 작업을 수행하기가 어렵습니다.
그 밖의 모든 것(함수 포함)에 대해서는 .bash_login과 그 친구들이 서브쉘에서 읽히지 않기 때문에 .bashrc에 넣으려고 합니다. .bashrc는 일반적으로 구성 파일/로그인 스크립트 중 하나를 통해 이루어집니다.
물론 PS1의 용도는 약간 다릅니다. PS1을 변경할 수 있는 기능을 원하기 때문입니다.
(Bash의 초기화 파일은 약간 흥미롭습니다. 로그인 쉘은 bash_profile과 친구들을 읽지만 bashrc는 읽지 않습니다. 비로그인 쉘은 정반대로 작동합니다. 따라서 구성 파일에서 bashrc를 참조하지 않는 한 모든 쉘 호출에서는 파일을 읽지 않습니다. . https://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files)
.profile, .bash_profile 및 .bash_login 중에서 선택하는 것은 전적으로 귀하에게 달려 있으며 전역 구성과 사용자별 구성 사이의 선택은 확실히 모든 사용자의 동작을 변경하려는지 아니면 한 명의 사용자만 변경하려는지에 따라 달라집니다.
오타가 있는 경우 셸을 열어 두고 스크립트를 변경한 후 테스트 실행해 보세요. :) 간단한 오타는 중요하지 않습니다. 최악의 경우 초기화 스크립트 읽기를 중단하거나 나머지 설정을 엉망으로 만들 수 있습니다. 어떤 이유에서든 .bashrc에 "종료"가 있는 경우를 제외하고는 말이죠.
답변2
나는 항상 PS1 코드를 bashrc에 넣습니다.
내 코드다음과 같이:
export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W \e[1;37m(\e[1;32m|\e[1;33m|\e[1;31m|\e[1;37m]\\$ \[\e[0m\]"
나는 루트(/root/.bashrc)에 대해 다른 PS1을 사용합니다. 빨간색 사용자 이름은 프로덕션과 로컬 서버에 대해 다른 형식입니다.
이것 좀 봐레딧멋진 코드를 위해. 줄바꿈 트릭은 정말 유용합니다!
답변3
이 질문은 본질적으로 의견을 묻는 것이므로 다른 답변을 얻게 될 것입니다. 예를 들어, 좋은 디자인 방법은 주어진 기능을 제공하기 위해 가능한 한 적은 수의 위치를 사용하는 것입니다. 일부는 사용자 정의 쉘 환경의 작업 부하를 줄이기 위해 이러한 정보를 시스템 영역에 배치합니다.
내 환경에서는 터미널 데이터베이스를 사용하고 가능할 때마다 이 질문에 제안된 하드코딩된 이스케이프 시퀀스 목록을 제거합니다. 예를 들어, 내 디렉토리 편집기에서 나는이름LS_COLORS
숫자 대신(전혀 사용되지 않음):
BSD는 또한 시스템에서 터미널 데이터베이스를 사용합니다.ls
구현하다, 그러나 "color ls" 기능은 구성하기가 어렵습니다. GNU ls는 구성하기가 더 쉽지만 의심스러운 결과를 제공합니다. 예를 들어
TERM=vt100 dircolors
프로그램
setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'
어디에(ncurses FAQ를 참조하세요)VT100을 사용하여 색상을 얻는 방법은 무엇입니까?) 개선되지 않았습니다.
다른 사람들이 사용하는tput
실제 색상을 얻으려면 TERM
여러 구성 파일에 정보를 분산시키는 대신 단일 환경 변수( )를 통해 사용자 정의를 변경하도록 허용하십시오.
사용자 정의를 시스템 영역에 배치할 경우 시스템에 업데이트가 적용될 때 사용자 정의를 유지하는 데 단점이 있습니다. 다른 것(예: Fedora)은 이미 존재합니다(참조특징/256 컬러 터미널) 하나 이상의 시스템에 대한 변경 사항을 조정하는 작업이 포함될 수 있습니다.
답변4
다 넣어보라고 권하고 싶다별명그리고기능파일에서는 일반적으로 ~/.bash_aliases
.
아직 없는 경우 .bashrc
다음 줄을 추가하거나 필요한 곳에 추가할 수 있습니다.
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Ubuntu에서 가져온 것은 .bashrc
물론 주석을 생략할 수 있습니다.
예를 들어 Ubuntu에서는 다음과 같습니다.표준하지만 이 파일의 사용 방식은 Ubuntu보다 오래되었습니다...
노트:
새 컴퓨터에서 계정을 설정하는 것이 더 편리할 것입니다.