에 코드를 이미 작동 : 출력 ([44;
, [0m
등) 내부에 흩어져있는 쓰레기의 무리가 있다는
total 68
-rw-r--r-- 4 root root 56158 Dec 23 00:00 [0m[44;38;5;15mCargo.lock[0m
-rw-rw-r-- 4 root root 2093 Dec 9 02:54 [44;38;5;15mCargo.toml[0m
drwxr-xr-x 1 root root 4096 Dec 30 15:24 [38;5;27msrc[0m
drwxr-xr-x 1 root root 4096 Dec 23 00:19 [38;5;27mtarget[0m
참고 :
use std::process::Command;
fn main() {
let output = Command::new("ls")
.args(&["-l", "--color"])
.env("LS_COLORS", "rs=0:di=38;5;27:mh=44;38;5;15")
.output()
.expect("Failed to execute");
let sout = String::from_utf8(output.stdout).expect("Not UTF-8");
let serr = String::from_utf8(output.stderr).expect("Not UTF-8");
println!("{}", sout);
println!("{}", serr);
}
출력을 인쇄합니다. 그것들은 ANSI escape codes이고, 터미널 에뮬레이터는 다음 텍스트의 색을 변경하기 위해 터미널 에뮬레이터를 해석합니다. 디버깅과 문자열을 인쇄 할 경우
, 당신은 볼 수 있습니다 :
\u{1b}[0m\u{1b}[44;38;5;15mCargo.lock\u{1b}[0m
각 이스케이프 코드는 ESC
(\u{1b}
)로 시작하는 실제 명령 하였다. 당신은 당신이하고있는 어떤 처리라도 그들을 무시하기 위해 그것을 파싱해야 할 것입니다.
Windows에서는 이스케이프 코드 (maybe it can in Windows 10?)가 사용되지 않고 대신 직접 modifies the console it is connected to 프로그램이 사용됩니다. 색상을 나타낼 출력물이 없습니다.
터미널에 출력하고 있다고 생각해서 바보짓을하는 방법을 찾고 있습니까? (따라서 출력물을 색칠합니다) 단순히 플래그/설정을 git에 전달하여 터미널 탐지에 의존하고 있습니까? –
'git'을 바보 취급하는 것은 좋은 생각 인 것 같습니다. 'git'은 stream이 TTY인지 확인합니다. (libuv의'if (uv_guess_handle (1) == UV_TTY)'와 같은 것) 좋아, 내가 속일 거라고 가정 해보자. (아직 얼마나 모르겠지만 조만간 해결할 것이다.) 그런 다음 내 출력에 이스케이프 코드가 포함되어 인쇄되면 최종 출력이 컬러됩니까? –
git을 속일 수 있다면 출력이 색으로 표시되어야합니다 (터미널에서 색칠 된 경우). 그러나 이것이 가장 어려운 옵션 일 수 있습니다. 어떻게 할 수 있는지 잘 모르겠습니다. –