예기치 않은 문자는 터미널 출력에 관한 텍스트 출력 형식을 지정하는 데 사용되는 이스케이프 시퀀스입니다. (이에 대한 자세한 내용은 Wikipedia: terminal emulator을 참조하십시오.)
자세한 내용은 prompt의 출력이 특정 bash 변수 인 PS1, PS2, PS3, PS4을 사용하여 구성 될 수 있습니다. How to change bash prompt color based on exit code of last command?에는 수정을위한 효과가 나타납니다 (재미 만).
귀하의 경우 bash
을 호출하면 이스케이프 시퀀스없이 간단하게 다시 정의 할 수있는 특수 스크립트가 있어야합니다. 따라서 원하지 않는 서식을 제거 할 수 있습니다. 도움이 될 수도 있습니다 : SO: Running a custom profile file on remote host하지만 이것은 또한 유망한 것으로 보인다 : Is it possible to start a bash shell with a profile at a custom location, in a one liner command?.
이 글을 쓰면서 특정 명령 (예 : ls
)이 컬러 출력을 지원한다는 사실을 기억했습니다. 나는 확실하지 않았다 나는이 시도 :
$ mkdir test ; cd test ; touch test1 ; ln -s test1 test2 ; mkdir test3 ; touch test4 ; chmod a+x test4
$ ls --color
test1 test2 test3 test4
$
여기 색상으로 포맷하는 방법을 모르지만, 내 xterm을에, 그것은 마디 그라처럼 찾고 있습니다. 따라서, 나는 효과를 보여 hexdump
를 사용
$ ls --color | hexdump -c
0000000 t e s t 1 \n 033 [ 0 m 033 [ 0 1 ; 3
0000010 6 m t e s t 2 033 [ 0 m \n 033 [ 0 1
0000020 ; 3 4 m t e s t 3 033 [ 0 m \n 033 [
0000030 0 1 ; 3 2 m t e s t 4 033 [ 0 m \n
0000040
당신이 볼 수 있듯이 : ls
또한 터미널 이스케이프 시퀀스를 사용 않습니다. 그런 다음 변수 TERM
을 기억했습니다. 이 링크 The TERM variable은 아마도 게임의 일부인 terminfo
또는 termcap
을 언급합니다.
따라서 PS1
... PS4
의 재 정의하는 것 외에도 TERM
를 재정의하는 것이 유용 할 수있다 :
$ TERM=
$ ls --color | hexdump -c
0000000 t e s t 1 \n t e s t 2 \n t e s t
0000010 3 \n t e s t 4 \n
0000018
$
Btw는. bash 프롬프트가 여전히 착색되었음을 알았습니다. 두 번 생각하면 분명해집니다. PS1
... PS4
의 이스케이프 시퀀스는 "하드 코드 됨"즉 TERM
의 설정을 고려하지 않습니다.
업데이트 :
이를 테스트하기 위해 나는 샘플 스크립트 mybashrc
썼다 :
PS1="> "
PS2=">>"
PS3=
PS4="++ "
TERM=
을 및 Windows 10 (64 비트)에 Cygwin에서의 떠들썩한 파티와 함께 테스트 :
$ bash --init-file mybashrc -i
> echo "$PS1 $PS2 $PS3 $PS4"
> >> ++
> exit
exit
$
Btw.[Backspace] 키가 샘플 세션에서 이상하게 작동한다는 것을 알았습니다. 의도 한 효과가 있지만 출력이 잘못되었습니다. 내부 버퍼가 올바르게 처리 할 보이지만 출력
대신 마지막 문자를 삭제하는 것이다 :
$ bash --init-file mybashrc -i
> echo "Ha ello"
Hello
> echo "Ha ello" | hexdump -c
0000000 H e l l o \n
0000006
> exit
exit
$
이 (두 경우 모두에서, I는
echo "Ha
후에 한번 [백 스페이스] 입력.) 그 이유는 아마도 누락 터미널 에뮬레이션이다.
따라서 콘솔 (응용 프로그램에서)이 배쉬의 출력 채널에서 백 스페이스를 적절하게 처리하면 혼동이 없어야합니다.
'bash.exe' 프로그램이 이스케이프 시퀀스와 컬러 코드를 완전히 추가하지 못하도록하는 명령이나 인수 나 매개 변수가 있습니까? – newpeople
나는 인자'-i'와'--login' (그리고 다른 것들)의 영향에 관한'man bash'를 읽었을뿐입니다. 왜냐하면 이것들이 여러분의 문제와 관련이있을 수 있다는 생각이 있었기 때문입니다. 내가 제대로 이해한다면,이 주장은 주로 bash의 시작과 종료시 실행되는 스크립트를 정의합니다. 이것은 실제로 색상 지원이 내장되어 있지 않다고 믿습니다. 모든 형식은 구성별로 수행됩니다. 따라서 위의 힌트가 충분해야합니다. – Scheff
따라서, 해결책은 아마 (추가 인수)'--init-file' 또는'--rcfile'과 앞서 언급 한 변수'PS1' ...'PS4'와' 용어'. – Scheff