Bash: 프롬프트를 다시 변경하고 싶을 때까지 명령 프롬프트를 영구적으로 변경하는 방법은 무엇입니까?

Bash: 프롬프트를 다시 변경하고 싶을 때까지 명령 프롬프트를 영구적으로 변경하는 방법은 무엇입니까?

두 개의 명령이 필요합니다. 첫 번째 명령은 프롬프트를 $␣또는 로 줄입니다 #␣. 이는 long_prompt프롬프트를 기본 버전으로 재설정하는 명령을 실행할 때까지 현재 셸에서 영구적이어야 합니다 .

short_prompt명령 스크립트 는 다음과 같습니다 .

if [ $(id -u) = 0 ]; then
   PS1='\[\033[01;34m\]#\[\033[00m\] '
else
   PS1='\[\033[01;34m\]\$\[\033[00m\] '
fi

(보시다시피 저는 관리자 쉘과 사용자 쉘에 대한 서로 다른 프롬프트를 존중합니다.)
이 스크립트를 다음과 같이 얻었을 때:

$ . short_prompt

모든 것이 예상대로 작동하지만 이를 위해서는 다음과 같이 디렉토리에 있거나 short_prompt전체 경로 이름을 제공해야 합니다.

$ . /data/system/bin/short_prompt

/usr/local/bin이 명령을 어디서든 액세스할 수 있게 만드는 방법(예를 들어 경로 디렉토리 중 하나에 대한 소프트 링크를 생성하여 )을 파악하고 다음을 입력하는 방법 을 알 수 없는 것 같습니다.

$ short_prompt

또는

$ long_prompt

export앞에 두 줄을 추가하려고 시도했지만 PS1='...'그 중 하나도 작동하지 않았습니다.

답변1

실행 중인 셸의 PS1에 영향을 미치는 유일한 방법은 코드를 얻는 것입니다.

이 문제를 해결하는 방법에는 여러 가지가 있습니다.

  1. /home/user/bin에 스크립트를 넣습니다.

    실행 가능하도록 스크립트 이름을 지정 short_prompt하고 /home/user/bin.

    #!/bin/bash
    . /data/system/bin/short_prompt
    

    이렇게 하면 실행이 간단해집니다.

    $ 짧은 프롬프트

  2. 별칭을 지정하세요

    $ alias short_prompt='. /data/system/bin/short_prompt'
    

    실행은 다음과 같습니다

    $ short_prompt
    
  3. 사용 ~/.bashrc:

    코드를 "~/.bashrc"에 함수로 배치합니다.

    short_prompt(){
        PS1='\[\033[01;34m\]\$\[\033[00m\] '
    }
    

    호출 방법은 다음과 같습니다.

     $ short_prompt
    

답변2

스크립트를 디렉터리에 넣으면 PATHBash는 source이를 사용하여 소스에 대한 스크립트를 찾습니다. 이건 바뀔 수 있어shopt sourcepath하지만 기본적으로 켜져 있습니다.

또 다른 옵션은 스크립트가 있는 경로에서 스크립트를 가져오는 별칭이나 함수를 만들거나 전체 프롬프트 할당을 함수에 넣는 것입니다. 이는 또한 스크립트를 명시적으로 사용 .하거나 호출할 필요가 없다는 장점도 있습니다 .source

참고로, 루트인 경우 루트 \$로 확장되므로 #루트에 대해 별도의 경로를 설정할 필요가 없습니다.

할당하면 export현재 셸에서 시작할 수 있는 다른 모든 셸에 환경 변수가 표시됩니다. PS1비대화형 쉘이 이를 지우는 데 문제가 있지만 일반적 으로 .bashrc.

관련 정보