새로운 형식과 올바른 플랫폼에서 동일한 문제를 다시 수행해 보세요.
기계가 있어요 (별명을 지어주세요)와동) centos 7 및 bash 4.2를 사용하여,그놈 터미널3.28.2, 위의 제어 문자 중 하나가 발견될 때마다 손상된 문자를 인쇄합니다. 명령 입력:
echo -e "\x01\e[0;34mGoodDay\x01\e[0m\x02"
예상 출력:
이 출력은 SSH를 통해 Eddy에 연결된 다른 시스템인 Konsole 2.10.5에서 인쇄됩니다.
얻은 출력 (에와동):
보시다시피 기계는 동일하지만 출력은 분명히 다릅니다.
내가 시도한 문자는 \x01 \x02
(Hex), \001 \002
(Oct) 및 이었지만 \[ \]
마지막 경우 대괄호는 해석되지 않고 있는 그대로 인쇄되었습니다.
LANG 변수 등을 확인했는데 모든 것이 Eddy 자체가 이러한 문서/표준의 최신 버전을 가지고 있음을 나타내는 것 같습니다.
나는 다음 문자를 추가했습니다(이 질문에 따르면:https://stackoverflow.com/a/19501528/21389760), 따라서 프롬프트( read -p
명령에 사용하는 경우)가 올바르게 래핑되고 인쇄되지 않는 문자는 화면의 공간을 차지하지 않습니다. 어쨌든 문제는 다음에만 존재하지만와동, 온라인에서 해결책을 찾지 못했습니다.
답변1
이러한 제어 문자는 터미널에 전혀 인쇄되지 않으며 Readline 라이브러리에서 사용됩니다.앞으로힌트의 목적은 Readline의 너비 계산을 돕는 것이기 때문에 힌트를 표시합니다(정확하게는 힌트의 너비를 결정해야 하기 때문입니다)아니요터미널 1 의 도움을 받으세요 ).
read
따라서 ("readline 사용") 옵션과 함께 사용할 때만 유용하지만 -e
, 그렇지 않으면 프롬프트에서 생략해야 합니다.
당신이 보고 있는 것은 "인쇄할 수 없는" 문자를 인쇄할 때 Konsole과 GNOME 터미널(또는 특히 libVTE) 사이의 다소 정상적인 동작 차이입니다. 그렇지 않으면 GNOME 터미널 생성 제어뿐만 아니라 터미널에 정의된 효과가 없습니다. 문자 표시 - 다른 터미널에서도 이 작업을 수행할 수 있습니다.
시퀀스 에도 동일하게 적용됩니다 \[
\]
. 바로 거기에 있습니다.구체적으로PS1 또는 PS2에서 사용되는 Bash의 경우(실제로 Readline 라이브러리에 프롬프트 문자열을 제공하기 전과 변환하기만 함) 다른 상황에서는 의미가 \x01
없습니다 .\x02
1 (단말기는 그런 도움이 필요하지 않습니다. 왜냐하면예렌더러는 이미 \e[...
래핑 시퀀스의 역할과 레이아웃에 미치는 영향을 이해하고 있습니다. )