![Bash 팁 - 백스페이스는 오른쪽 정렬된 텍스트를 삭제합니다(중지할 수 있나요?)](https://linux55.com/image/76971/Bash%20%ED%8C%81%20-%20%EB%B0%B1%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%8A%94%20%EC%98%A4%EB%A5%B8%EC%AA%BD%20%EC%A0%95%EB%A0%AC%EB%90%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4(%EC%A4%91%EC%A7%80%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F).png)
매우 짜증나는 문제가 있습니다. 나는 bash PS1을 만들기 위한 모든 프로토콜을 따랐습니다. \[
및 \]
또는 및 가 \001
포함된 인쇄할 수 없는 문자 에 대해 알고 있지만 \002
표시되는 텍스트에 문제가 있습니다.뒤쪽에커서의 위치입니다. 백스페이스 키를 누르면 모든 것이 사라집니다.
bash PS1을 살펴보십시오(이것을 bashrc로 만들고 테스트하는 것이 유용할 수 있습니다. bashrc의 복사본을 저장하십시오).
## GRML
# grml battery?
GRML_DISPLAY_BATTERY=1
# battery dir
if [ -d /sys/class/power_supply/BAT0 ]; then
_PS1_bat_dir='BAT0';
else
_PS1_bat_dir='BAT1';
fi
# ps1 return and battery
_PS1_ret(){
# should be at beg of line (otherwise more complex stuff needed)
RET=$?;
# battery
if [[ "$GRML_DISPLAY_BATTERY" == "1" ]]; then
if [ -d /sys/class/power_supply/$_PS1_bat_dir ]; then
# linux
STATUS="$( cat /sys/class/power_supply/$_PS1_bat_dir/status )";
if [ "$STATUS" = "Discharging" ]; then
bat=$( printf ' v%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
elif [ "$STATUS" = "Charging" ]; then
bat=$( printf ' ^%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
elif [ "$STATUS" = "Full" ] || [ "$STATUS" = "Unknown" ] && [ "$(cat /sys/class/power_supply/$_PS1_bat_dir/capacity)" -gt "98" ]; then
bat=$( printf ' =%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
else
bat=$( printf ' ?%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
fi;
fi
fi
if [[ "$RET" -ne "0" ]]; then
printf '\001%*s%s\r%s\002%s ' "$(tput cols)" ":( $bat " "[0;31;1m" "$RET"
else
printf '\001%*s%s\r\002' "$(tput cols)" "$bat "
fi;
}
# ps1 git branch
_PS1_git(){
if ! type 'git' &> /dev/null; then
return 1;
fi;
if [ ! "$( git rev-parse --is-inside-git-dir 2> /dev/null )" ]; then
return 2;
fi
branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"
if [ "$branch" ]; then
printf ' \001%s\002(\001%s\002git\001%s\002)\001%s\002-\001%s\002[\001%s\002%s\001%s\002]\001%s\002' "[0;35m" "[39m" "[35m" "[39m" "[35m" "[32m" "${branch}" "[35m" "[39m"
fi;
}
# grml PS1 string
PS1="\[\e[0m\]\$(_PS1_ret)\[\e[34;1m\]${debian_chroot:+($debian_chroot)}\u\[\e[0m\]@\h \[\e[01m\]\w\$(_PS1_git) \[\e[0m\]% "
당신은 다음과 같은 것을보아야합니다
user@host ~ % █ v87%
당신은 그것을 볼 수 없습니다 v87%
. 그것은 중요하지 않습니다. 이렇게 하면 Ctrlc왼쪽과 :(
맨 오른쪽에 빨간색 오류 코드가 표시됩니다.
그래서 당신은 보게 될 것입니다
130 user@host ~ % █ :( v87%
또는
130 user@host ~ % █ :(
어느 쪽이든 커서 오른쪽에 뭔가가 있습니다.
이제 를 입력하면 (배터리 정보도) 사라지는 것을 Backspace볼 수 있습니다 ! :(
( up그다음 누르시면 down같은 동작을 하게 됩니다.)
이것을 알아낼 수 있다면 당신은 나의 영웅입니다! 쉽지 않을 수도 있지만 스마트한 솔루션이 있다면... 바닥은 당신의 것입니다.
답변1
하나도 아니야직접프로그래밍 답변이지만 설치를 통해 원하는 효과를 얻을 수 있습니다.액체 팁$PS1
, 배터리 통계는 물론 기타 다양한 유형의 유용한 진단 데이터를 표시할 수 있습니다 . 기본 설정을 조정하려면 자동으로 생성된 ~/.config/liquidpromptrc
.
메인 프로그램 liquidprompt_activate
과 그것이 호출하는 스크립트는 모두쉘 스크립트, 작동 방식을 연구하는 데 훌륭한 소스가 됩니다.