내 터미널 프롬프트에서 "${debian_chroot:+($debian_chroot)}"는 무엇을 합니까?

내 터미널 프롬프트에서 "${debian_chroot:+($debian_chroot)}"는 무엇을 합니까?

.bashrc파일의 터미널 프롬프트 정의에는 무엇보다도 다음 코드 조각이 있습니다.

${debian_chroot:+($debian_chroot)}

이것은 무엇을 하며 나에게 필요합니까?

답변1

이 질문에 대답하는 중요한 부분은 다음의 스니펫입니다 /etc/bash.bashrc.

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

이는 변수가 $debian_chroot비어 있고 파일이 /etc/debian_chroot존재하고 읽을 수 있는 경우 변수가 파일의 내용으로 설정됨을 의미합니다.

이제 이것은 무엇을 위한 것입니까? 파일은 /etc/debian_chroot다른 데비안 시스템 내에 chrooted 데비안 시스템이 있을 때입니다(우분투는 데비안 기반입니다). 따라서 이것은 더 나은 개요를 위한 것입니다. 당신이 chroot에 있는지 여부를 구별합니다.

예를 들어 다른 시스템의 chroot가 있는 경우 /srv/nfs4/netboot/이 chroot의 이름을 설정할 수 있습니다 /srv/nfs4/netboot/etc/debian_chroot(제 경우에는 nfs4 pxe netboot 드라이브입니다).

user@host:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot

그런 다음 내부를 chroot하면 다음과 같습니다.

chroot /srv/nfs4/netboot/

프롬프트는 다음과 같습니다.

(netboot)user@host:~#

답변2

일반적으로 다음을 ${var:+value}의미합니다.

if $var is defined and not null; then use 'value'; else do nothing

변수 는 파일 debian_chroot에 정의되어 있습니다 /etc/bash.bashrc. /etc/debian_chroot이 파일이 존재하고 읽을 수 있으면 파일 의 내용을 사용합니다 . 기본적으로 이 파일은 존재하지 않습니다.

자세한 내용은 다음을 참조하세요.

이제 정확히 무슨 일이 일어나고 있는지 더 잘 이해하려면 터미널에서 다음을 수행하십시오.

radu@Radu:~$PS1='${var:+($var)}\u@\h:\w\$ '
라두@라두:~$var="테스트"
                  ----
                   |
  ------------------
  |
  V
(테스트)radu@Radu:~$var=""
라두@라두:~$var="등"
(등)radu@Radu:~$

답변3

환경 변수가 $debian_chroot존재하고 비어 있지 않으면 (즉, 주변에 괄호 값이 있음 ) ${debian_chroot:+($debian_chroot)}로 대체됩니다 .($debian_chroot)$debian_chroot

$debian_chroot해당 파일이 존재하고(기본적으로는 존재하지 않음) 아직 값이 없는 경우 /etc/bash.bashrc의 내용으로 설정됩니다 ./etc/debian_chroot$debian_chroot

${debian_chroot:+($debian_chroot)}일반적으로 Bash 프롬프트를 정의하는 데 사용됩니다. 예를 들어

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

이름에서 알 수 있듯이 이 변수를 사용하여 etc/debian_chrootchroot 루트 폴더에 배치하여 현재 있는 chroot를 나타낼 수 있습니다.

chroot가 무엇인지 모른다면 그럴 필요가 없을 것입니다. ;-) 그러나 Bash 프롬프트에 다른 정보를 포함시키기 위해 이를 남용할 수도 있습니다.

기본적으로는 아무 작업도 수행하지 않습니다.

답변4

사용할 필요가 없다면 debian_chroot다음을 사용하여 명령 프롬프트가 표시된 시간을 입력하는 것이 편리합니다.

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

터미널에 다음을 입력하고 시간에 따라 명령 프롬프트가 변경되는 것을 확인하세요.

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

시간을 한 번 설정한 후 매초마다 업데이트되는 실행 중인 시계를 얻으려면 다음을 사용하세요.

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

관련 정보