
내 시도는 다음과 같습니다.
마지막 방법은 작동했지만 복사-붙여넣기가 중단되었습니다(복사할 때 많은 공백이 추가됨). 더 좋은 방법이 있나요?
복사 가능한 텍스트:
$ 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