PS1이 호출될 때마다, 즉 모든 새 프롬프트가 호출될 때마다 "change" 변수를 업데이트합니다.

PS1이 호출될 때마다, 즉 모든 새 프롬프트가 호출될 때마다 "change" 변수를 업데이트합니다.

내가 이 작업을 수행할 수 있어야 하는 이유는 내 PS1의 변수를 "업데이트"하기 위해서입니다. 프롬프트가 줄 바꿈되거나 새 줄로 내려가지 않고 터미널의 전체 너비에 걸쳐 표시되기를 원합니다. 이를 위해 작동시키는 방법을 찾았지만 이 방법을 사용하려면 매번 bash를 다시 로드해야 합니다. 나는 그것이 다음과 같이 보이기를 원합니다 :

|me::awesome| --------------------------------------------------------- ~/.config/awesome
$

나중에 새 디렉터리로 CD를 넣으면 다음과 같이 표시됩니다.

|me::themes| -------------------------------------------------------------------------
------ ~/.config/awesome/themes
$

하지만 내가 달릴 때

exec bash

아래와 같이 모든 값이 성공적으로 변경됩니다.

|me::themes| --------------------------------------------------- ~/.config/awesome/themes
$

그래서 새로운 프롬프트가 호출될 때마다 업데이트하려는 PS1 변수에 변경 변수를 통합하는 방법을 찾고 있습니다. 내 .bashrc는 현재 다음과 같습니다.

mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
PS1='|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'

또한 변수를 별도의 쉘 스크립트 파일에 넣고 다음과 같이 PS1에서 해당 파일을 실행해 보았습니다.

#/home/me/.PS1.sh
mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
echo "|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$"

#/home/me/.bashrc
PS1=$(/home/me/.PS1.sh)

답변1

변수는 처음에만 평가되므로 처음에 문자 그대로 처리되고 명령이 실행된 후에 평가되도록 ps1에 넣어야 합니다.

PS1='|me::\W| $( mytest=$PWD;mynext="${PWD##*/}";  mylength=$((${#mytest}+${#mynext})) ; length=$(($mylength+6)) ; printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'

ps1에 콘텐츠를 추가했다면 6개만 변경할 수 있습니다.

관련 정보