내 시도는 다음과 같습니다.
마지막 것은 작동하지만 복사-붙여넣기가 중단됩니다(복사할 때 많은 공백이 추가됩니다). 더 좋은 방법이 있나요?
복사 가능한 텍스트:
$ PS1='\['$'\x1b[0m\]$ '
$ echo -e "\x1b[41;37mWarning text\x1b[0m"; echo Normal text
Warning text
Normal text
$ echo -ne "\x1b[41;37mWarning text"$'\n'"\x1b[0m"; echo Normal text
Warning text
Normal text
$ echo -ne "\x1b[41;37mWarning text"$'\n'"\x1b[47;30m"; tr </dev/zero \\0 \ |head -c 80; echo -ne "\x1b[A"; echo Normal text
Warning text
Normal text
$
$ t="Warning text";echo -ne "\x1b[41;37m";echo -n "$t";{ tr </dev/zero \\0 \ |head -c $(bc <<<"$(stty -a <&3|grep -Po '(?<=columns )[0-9]+')-$(wc -c<<<"$t")+1"); } 3<&0;echo -e "\x1b[0m";echo "Normal text"
Warning text
Normal text
$
답변1
나는 스스로 해결책을 찾았습니다.이 관련 질문). 이것을 사용하십시오 :
echo -e '\x1b[41;37mWarning text\x1b[K\x1b[0m';echo Normal text
문서에는 다음과 같이 나와 있습니다 \x1b[K
.
K EL Erase line (default: from cursor to end of line).
ESC [ 1 K: erase from start of line to cursor.
ESC [ 2 K: erase whole line.
답변2
줄 끝까지 지우면 xterm의 현재 배경색과 Linux 콘솔 및 이 동작을 복제하는 터미널이 사용됩니다. ncurses에서는 이것을 배경색 지우기(bce) 기능이라고 합니다. 이 기능이 지원되는 경우 현재 편집된 행의 배경을 지정된 색상으로 유지하는 방법을 제공합니다.
하지만:
- 줄 바꿈을 편집할 때는 유용성이 떨어집니다.
- rxvt/urxvt 터미널에는 몇 가지 차이점이 있습니다. 관련 문자 지우기(ech) 기능은 배경색을 사용하지 않습니다. 쉘은 행을 편집할 때 이것을 사용할 수 있습니다.
- 스크롤할 때 모든 터미널이 현재 배경색을 사용하는 것은 아닙니다(xterm 및 Linux 콘솔처럼).
추가 자료:
답변3
이건 어때:
printf '\e[41m%-*s\e[0m\n' $COLUMNS 'Warning text'
매개변수를 받아들이고 색상 변수를 추가하는 등의 기능을 함수로 만들 수도 있습니다.
linecolor () { printf '\e[41m%-*s\e[0m\n' $COLUMNS "$1"; }
용법:
linecolor 'Warning text'
답변4
추가 초기 빈 줄이 허용되는 경우:
echo -e "\x1b[41;37m\n\x1b[0m\x1b[41;37mWarning\x1b[0m"; echo "Normal"
작동하는 것 같습니다.
내가 보고 있는 동작에 대해 내가 생각할 수 있는 유일한 설명은 터미널이 새 줄에 사용할 배경색을 결정하는 방법에 따라 달라지며, xterm
내가 사용하고 있는 터미널과 다른 터미널을 사용하는 경우에는 조금 다르게 작동할 수도 있습니다.
사용하면 마지막 방법을 더 쉽게 읽을 수 있다고 생각하므로 printf
복사-붙여넣기가 여전히 중단되더라도 다음과 같습니다.
printf "\x1b[41;37m%-$(stty size | cut -d' ' -f2)s\x1b[0m\n" hello; echo world; echo test