실행중인 쉘에서 변수를 어떻게 편집 할 수 있습니까? 대화식으로 변수를 편집하는 방법이 있습니까? PS1은

PS1 프롬프트를 편집 중이며 bashrc가 다른 것들을 재설정하기 때문에 bashrc를 계속 업데이트하고 싶지 않습니다. 또한 복사하여 붙여 넣기를 원하지 않습니다. nano(기본 편집기)를 사용하는 것과 같이 대화식으로 변수를 편집하는 방법이 있습니까?

PS1은 다른 예제와 동일한 작업을 원하기 때문에 주로 예입니다. 대화 형으로하고 싶은 이유는 변수가 이미 길기 때문에 몇 가지 문자를 편집해야하기 때문입니다. 그리고 현재 쉘에서만 변경하면됩니다.



답변

할 수 있습니다. 입력 var=$var한 다음 확장하고 편집하십시오. 확장하려면 Esc+를 사용 Ctrle하십시오 (기본 바로 가기, 출력 bind -p | grep shell-expand-line을 확인하여 확인하십시오).

그래서:

muru@muru-1604:~$ PS1=$PS1

될 것입니다:

muru@muru-1604:~$ PS1=${debian_chroot:+($debian_chroot)}\u@\h:\w\$

그런 다음 Ctrlx Ctrle( edit-and-execute-commandreadline 용어로) 편집기에서 편집 할 수 있습니다 . 저장하고 종료하면 저장된 내용이 쉘에 의해 실행됩니다.

당신이 이미 PS1=...당신의 역사에 있다면 , 당신은 그것으로 되돌아 갈 수 있습니다 Ctrlx Ctrle.

에서 bash는 설명서 :

shell-expand-line (M-C-e)

쉘처럼 라인을 확장하십시오. 이것은 모든 쉘 단어 확장뿐만 아니라 별명 및 히스토리 확장을 수행합니다.

edit-and-execute-command (C-xC-e)

현재 명령 행에서 편집기를 호출하고 결과를 쉘 명령으로 실행하십시오. Bash는 $ VISUAL, $ EDITOR 및 emacs를 순서대로 편집기로 호출하려고 시도합니다.


답변

bashrc를 소싱하는 대신 변수 만 포함하는 다른 파일을 소싱하십시오.

  1. 그것을 만드십시오 :

    echo "PS1='$PS1'" > /tmp/PS1
    • 참고 : 변수에 작은 따옴표가 포함되어 있으면 이스케이프 할 수있는 명령을 사용해야합니다. 예 :

      declare -p PS1 | cut -d' ' -f3- > /tmp/PS1
  2. 편집기에서 파일을 엽니 다 (예 🙂 nano /tmp/PS1.

    • nano반복 실행을 피하기 위해 다른 터미널 / TTY에서 실행하거나 그래픽 편집기를 사용할 수 있습니다.
  3. 변경하고 저장하십시오.

  4. 그것을 소스 :

    source /tmp/PS1
  5. 필요에 따라 3 단계와 4 단계를 반복하십시오.


답변

Zsh에는 vared변수를 인라인으로 편집 할 수 있는 내장 기능이 있습니다. 원래 수퍼 유저에 게시 내 자신의 버전을 작성했습니다 .

vared(){
    # Based on the zsh builtin of the same name.
    IFS= read -rei "${!1}" "$1"
}

이것은 Zsh 내장과 약간의 차이점이 있습니다.

  • 변수가 설정되지 않은 경우 오류가 발생하지 않습니다
  • 변수 이름 검사의 유효성을 하기 전에 그 값을 인쇄 (예 vared $)
  • 여러 줄 변수를 자릅니다.

그런 다음 PS1을 편집하려면을 실행하십시오 vared PS1.


답변