MySQL 명령 줄 색상 프롬프트


22

MySQL 명령 줄 색상 프롬프트에 색상을 추가하고 싶습니다.

지금까지 스크립트 (database.sh)에 있습니다.

mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "

내가 좋아하는 것 root빨간색 , @블루 , localhost녹색database시안 :

root@localhost:database>

내 스크립트 에서이 작업을 수행 할 수 있습니까?



1
나는 그것을 보았지만 작동하지 않습니다
EscoMaji

네, 일반 쉘 프롬프트에서와 같은 방법으로 가능하다고 생각합니다. 가장 좋은 방법은 래퍼 또는 고급 MySQL 클라이언트 일 것입니다.
micke

1
설치 프로그램이 ANSI 이스케이프 코드를 지원합니까? 이 경우 다음과 같은 방식으로 사용할 수 있습니다. --prompt = "^ [[1; 33m이 부분은 노랑색입니다 ^ [[0m \ u @ \ h : \ d>"
Hennes

답변:


14

할 수 없다고 말하는 사람들의 말을 듣지 마십시오. 이리:

$ alias colormysql=$(echo -e 'mysql --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\h\x1B[0m:\x1B[36m\\d>\x1B[0m "')

그때:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

왜 이것이 작동하는지에 대해 좀 더 설명해 주시겠습니까?하지만 ANSI 코드를 전달할 수는 없습니까?
Bryan Agee

$(foo)foo의 결과를 실행합니다 (이 경우 echo 출력). echo -e는 \ x1b를 이스케이프 문자로 확장합니다. \ x1b [31m은 현재 색상을 빨간색으로 설정하는 터미널 제어 코드입니다. 기타 등등. \ x1b [0m은 색상을 기본 터미널 색상으로 반환합니다.
Irongaze.com

1
색상을 테스트 할 때 다음을 수행하여 별칭 단계를 건너 뛰는 것이 mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
좋습니다

4
또한 색상 코드를 포함하는 이스케이프 코드를 추가하면 다음과 같이 올바르게 작동합니다 (기록을 탐색하면 프롬프트가 엉망이되지 않습니다) $ alias colormysql = $ (echo -e 'mysql --prompt = "\ 001 \ x1B [31m \ 002 \\ u \ 001 \ x1B [34m \ 002 @ \ 001 \ x1B [32m \ 002 \\ h \ 001 \ x1B [0m \ 002 : \ 001 \ x1B [36m \ 002 \\ d> \ 001 \ x1B [0m \ 002 " ')
David Santamaria

2
@CyprianGuerra-위의 @ david-santamaria의 의견 을보고 적절한 지원을 위해 순서 \001\002주변을 사용하십시오 readline. $ alias colormysql=$(echo -e 'mysql --prompt="\001\x1B[31m\002\\u\001\x1B[34m\002@\001\x1B[32m\002\\h\001\x1B[0m\002:\001\x1B[36m\002\\d>\001\x1B[0m\002 "') 렌더링 문제의 어떤 종류가있는 것 같습니다 복사 및 붙여 넣기 그 브라우저에서 \002:\001명령의 부분으로 클립 보드에 투입되고있다 \002:\<200c><200b>001(여기서 <200c><200b>않은 워드에서 비 인쇄 문자, 아마도 CR / NL입니다 외장).
dossy

8

컬러화 된 mysql 프롬프트 설정에 대한 연습.

1 단계. 설정된 프롬프트로 정상적으로 로그인하는 방법을 이해합니다.

eric@dev ~ $ mysql --host=yourhost.com -u username --prompt="foobar> " -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 711
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> 

2 단계. echo를 통해 해석 된 표현식을 'alias'로 파이프하는 방법을 이해하십시오.

위의 1 단계와 정확히 동일합니다.

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="foobar> " -p')
eric@dev ~ $ penguins
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 713
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> exit
Bye
eric@dev ~ $

3 단계. echo -e가 색상 표현을 평가하는 방법 이해 :

"foobar>"프롬프트가 빨간색으로 표시됩니다.

alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31mfoobar>\x1B[0m " -p')
penguins

이처럼 :

여기에 이미지 설명을 입력하십시오

4 단계. 여기서 무슨 일이 일어나고 있는지 혼란 스러울 경우 :

표현을보십시오 : \x1B[31mfoobar>\x1B[0m

세 부분으로 구성됩니다.

code               what it means:

\x1B[31m           Start colorizing, 31m is red.
foobar>            prompt text
\x1B[0m            Stop colorizing.

4 단계. 고급, 프롬프트를 정말 멋지게 만듭니다.

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m " -p')
eric@dev ~ $ penguins

여기에 이미지 설명을 입력하십시오

이 거대한 코드의 기능에 대해 혼란 스러울 경우 :

\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m

설명:

Code         Note
\x1B[31m     Start colorizing red
\\u          escape the backslash for passage through echo, and print username
\x1B[34m     Start colorizing dark blue
@            literal at sign
\x1B[32m     Start colorizing green
\\v          escape the backslash for passage through echo, print server version
\x1B[0m      Stop colorizing
:            literal colon
\x1B[36m     Start colorizing cyan
\\d>         Backslash for passage through echo, print default db and >
\x1B[0m      Stop colorizing.

와우 많은 코드.


1
readline줄 길이에 대해 혼동되지 않고 mysql명령 줄 에서 여러 줄을 편집하지 않도록 터미널 코드를 올바르게 이스케이프하는 방법에 대한 아이디어가 있습니까? (여러 줄을 쓴 다음 백 스페이스를 길게 누르십시오)
cprn

이것은 별도의 접선 질문으로 별도의 스택 오버플로 질문으로 제기되어야합니다. 물론 완전한 프로그래밍 언어에 접근하는 것이 가능하지만 몇 시간을 들여 놓지 않고 어떻게 알 수 있는지가 문제입니다.
Eric Leschinski

0

프롬프트가 터미널의 제목에 있기를 원했습니다. 본질적으로 다른 프롬프트 코드 인 컬러 프롬프트를 원할 때와 같은 문제입니다. 이것을 가로 질러 colormysql답변에 언급 된 것과 같은 특별한 별칭을 기억하지 않고도 할 수 있는지 궁금했습니다 .

.bashrc내 컴퓨터에서 트릭을 수행하는 다음을 추가했습니다 .

export MYSQL_PS1=$(echo -e "\033]0;\u@\h [\d]\007\u@\h [\d]> ")

이것이하는 것은 변수에 echo -e원시 이스케이프 문자 (심볼 문자가 아닌)를 생성하는 데 사용 됩니다 MYSQL_PS1. 이것은 색상에도 적용됩니다.


-2

매우 유감스러운 답변이지만 할 수는 없습니다.


ANSI 이스케이프 시퀀스 사용과 관련하여 MySQL은 다음을 허용합니다 .

옵션 값에 이스케이프 시퀀스“\ b”,“\ t”,“\ n”,“\ r”,“\”및“\ s”를 사용하여 백 스페이스, 탭, 줄 바꿈, 캐리지 리턴, 백 슬래시 및 공백 문자


cmjdmiller의 답변과 관련하여 grc 는 "pager"를 통해 MySQL 셸의 출력을 표시하는 기능 만합니다 .


당신이 할 수있는 최선의 방법은 다음 과 같이 rlwrap을 사용 하는rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "입니다. 그러나 전체 프롬프트를 색상으로 표시하므로 세밀한 제어가 불가능합니다. 암호는 일반 텍스트로 표시되므로주의하십시오.


오래되었습니다. 프롬프트 옵션에 사용할 수있는 많은 값이 있습니다. 여기를 참조하십시오 : dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


너무 잘못 된 것은 아닙니다. 한 가지로, ANSI 이스케이프 시퀀스 는 MySQL과 완전히 독립적 인 것이고, 다른 하나는 여기서 다른 답변에서 충분히 설명했듯이 확실히 사용될 수 있습니다.
Jeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.