about_ANSI_Terminals

간단한 설명

PowerShell에서 ANSI 이스케이프 시퀀스에 사용할 수 있는 지원에 대해 설명합니다.

자세한 설명

PowerShell에는 POWERShell을 호스팅하는 터미널 애플리케이션에서 출력 렌더링을 제어하기 위해 ANSI 이스케이프 시퀀스를 사용하도록 지원하는 많은 기능이 있습니다.

PowerShell 7.2는 새로운 자동 변수를 추가했으며 ANSI $PSStyle데코레이팅된 텍스트의 출력을 지원하기 위해 PowerShell 엔진이 변경되었습니다.

ANSI 터미널 지원

ANSI 기능은 xterm 기반 터미널과 호환되도록 설계되었습니다. 자세한 내용은 위키백과에서 xterm을 참조하세요.

Windows 10 이상에서는 Windows 콘솔 호스트가 xterm과 호환됩니다. Windows 터미널 애플리케이션도 xterm과 호환됩니다.

macOS에서 기본 터미널 애플리케이션은 xterm 호환됩니다.

Linux의 경우 각 배포판은 다른 터미널 애플리케이션과 함께 제공됩니다. 적절한 터미널 애플리케이션을 찾으려면 배포에 대한 설명서를 참조하세요.

$PSStyle

변수에는 다음과 같은 속성이 있습니다.

  • 다시 설정 - 모든 장식 해제
  • 깜박임 - 깜박임 켜기
  • BlinkOff - 깜박임 해제
  • 굵게 - 굵게 켜기
  • BoldOff - 굵게 끄기
  • 숨김 - 숨김 켜기
  • HiddenOff - 숨김 해제
  • 역방향 - 역방향 켜기
  • ReverseOff - 역방향 해제
  • 기울기 - 기울기 켜기
  • ItalicOff - 기울기 해제
  • 밑줄 - 밑줄 켜기
  • UnderlineOff - 밑줄 끄기
  • 취소선 - 다음을 통해 스트라이크를 켭니다.
  • StrikethroughOff - 스트라이크를 끕니다.
  • OutputRendering - 출력 렌더링이 사용되는 시기 제어
  • 서식 지정 - 출력 스트림의 기본 서식을 제어하는 중첩된 개체
  • Progress - 진행 률 표시줄의 렌더링을 제어하는 중첩된 개체
  • FileInfo - FileInfo 개체의 색 지정을 제어하는 중첩된 개체입니다.
  • 전경 - 전경 색 지정을 제어하는 중첩된 개체
  • 배경 - 배경색을 제어하는 중첩된 개체

기본 멤버는 이름에 매핑되는 ANSI 이스케이프 시퀀스의 문자열을 반환합니다. 값은 사용자 지정을 허용하도록 설정할 수 있습니다. 예를 들어 굵게를 밑줄로 변경할 수 있습니다. 속성 이름을 사용하면 탭 완성을 사용하여 데코레이팅된 문자열을 더 쉽게 만들 수 있습니다.

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

다음 멤버는 ANSI 서식을 사용하는 방법 또는 시기를 제어합니다.

  • $PSStyle.OutputRendering 값이 있는 System.Management.Automation.OutputRendering 열거형입니다.

    • ANSI: ANSI 이스케이프 시퀀스는 항상 있는 그대로 전달됩니다.

      Important

      출력을 다운스트림으로 실행하려는 파일 또는 파이프라인으로 리디렉션할 때 ANSI 모드를 사용해야 합니다. 이렇게 하면 출력이 변경되지 않습니다. 다른 모드를 사용하면 ANSI 이스케이프 시퀀스를 제거하여 출력이 변경되어 실행 동작이 변경됩니다.

    • PlainText: ANSI 이스케이프 시퀀스는 일반 텍스트만 되도록 항상 제거됩니다.

    • Host: 기본 동작입니다. ANSI 이스케이프 시퀀스는 리디렉션되거나 파이프된 출력에서 제거됩니다. 자세한 내용은 출력 리디렉션을 참조하세요.

  • 멤버 및 $PSStyle.Foreground 멤버는 $PSStyle.Background 16개의 표준 콘솔 색에 대한 ANSI 이스케이프 시퀀스를 포함하는 문자열입니다.

    • Black
    • BrightBlack
    • White
    • BrightWhite
    • Red
    • BrightRed
    • Magenta
    • BrightMagenta
    • Blue
    • BrightBlue
    • Cyan
    • BrightCyan
    • Green
    • BrightGreen
    • Yellow
    • BrightYellow

    값은 설정할 수 있으며 여러 ANSI 이스케이프 시퀀스를 포함할 수 있습니다. 24비트 색을 지정하는 메서드도 FromRgb() 있습니다. 메서드를 호출하는 방법에는 두 가지가 있습니다 FromRgb() .

    string FromRgb(byte red, byte green, byte blue)
    string FromRgb(int rgb)
    

    다음 예제 중 하나에서 배경색을 24비트 색 Beige으로 설정합니다.

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting 는 디버그, 오류, 자세한 정보 표시, 경고 메시지, 목록 및 테이블 헤더의 기본 서식을 제어하는 중첩된 개체입니다. 굵게 표시 및 밑면과 같은 특성을 제어할 수도 있습니다. 렌더링 서식 지정을 위한 색을 관리하는 방법으로 대체 $Host.PrivateData 됩니다. $Host.PrivateData 는 이전 버전과의 호환성을 위해 계속 존재하지만 연결 $PSStyle.Formatting되지는 않습니다. $PSStyle.Formatting 에는 다음 멤버가 있습니다.

    • FormatAccent - 목록 항목에 대한 서식 지정
    • TableHeader - 테이블 헤더에 대한 서식 지정
    • ErrorAccent - 오류 메타데이터에 대한 서식 지정
    • 오류 - 오류 메시지 서식 지정
    • 경고 - 경고 메시지 서식 지정
    • 자세한 정보 표시 - 자세한 메시지 서식 지정
    • 디버그 - 디버그 메시지의 서식 지정
  • $PSStyle.Progress 를 사용하면 진행률 보기 표시줄 렌더링을 제어할 수 있습니다.

    • 스타일 - 렌더링 스타일을 설정하는 ANSI 문자열입니다.
    • MaxWidth - 뷰의 최대 너비를 설정합니다. 기본값은 120입니다. 최소값은 18입니다.
    • 보기 - 값 Minimal 이 있는 열거형 및 Classic. Classic 는 변경 없이 기존 렌더링입니다. Minimal은 최소한의 단일 줄 렌더링입니다. 기본값은 Minimal입니다.
    • UseOSCIndicator - 기본값은 .입니다 $false. OSC 표시기를 $true 지원하는 터미널에 대해 이 설정을 지정합니다.

    참고 항목

    호스트가 가상 터미널 $PSStyle.Progress.View 을 지원하지 않는 경우 자동으로 로 설정 Classic됩니다.

    다음 예제에서는 렌더링 스타일을 최소 진행률 표시줄로 설정합니다.

    $PSStyle.Progress.View = 'Minimal'
    
  • $PSStyle.FileInfo는 FileInfo 개체의 색 지정을 제어하는 중첩된 개체입니다.

    • 디렉터리 - 디렉터리의 색을 지정하는 기본 제공 멤버
    • SymbolicLink - 기호 링크의 색을 지정하는 기본 제공 멤버
    • 실행 파일 - 실행 파일의 색을 지정하는 기본 제공 멤버입니다.
    • 확장 - 이 멤버를 사용하여 다른 파일 확장 프로그램에 대한 색을 정의합니다. 확장 멤버에는 보관 파일 및 PowerShell 파일용 확장자가 사전에 포함되어 있습니다.

ANSI 출력을 생성하는 Cmdlet

  • markdown cmdlet - Show-Markdown cmdlet은 markdown 텍스트를 포함하는 파일의 내용을 표시합니다. 출력은 ANSI 시퀀스를 사용하여 다른 스타일을 나타내기 위해 렌더링됩니다. Get-MarkdownOptionSet-MarkdownOption cmdlet을 사용하여 스타일 정의를 관리할 수 있습니다.
  • PSReadLine cmdlet - PSReadLine 모듈은 ANSI 시퀀스를 사용하여 명령줄에서 PowerShell 구문 요소의 색을 지정합니다. 색은 Get-PSReadLineOptionSet-PSReadLineOption을 사용하여 관리할 수 있습니다.
  • Get-Error- Get-Error cmdlet은 읽기 쉽도록 서식이 지정된 Error 개체의 자세한 보기를 반환합니다.
  • Select-String - PowerShell 7.0 부터 Select-String 은 ANSI 시퀀스를 사용하여 출력에서 일치하는 패턴을 강조 표시합니다.
  • Write-Progress - ANSI 출력은 위에서 설명한 대로 사용하여 $PSStyle.Progress관리됩니다. 자세한 내용은 쓰기 진행률을 참조 하세요.

모드에서 Host 출력 리디렉션

기본적으로 $PSStyle.OutputRendering 호스트로 설정된 것입니다. ANSI 이스케이프 시퀀스는 리디렉션되거나 파이프된 출력에서 제거됩니다.

OutputRendering은 호스트의 렌더링에만 적용되며 Out-String. Out-File 네이티브 실행 파일의 출력은 영향을 받지 않습니다.

PowerShell 7.2.6은 다음 시나리오의 Out-File 동작을 Out-String 변경했습니다.

  • 입력 개체가 순수 문자열인 경우 이러한 cmdlet은 OutputRendering 설정에 관계없이 문자열을 변경하지 않고 유지합니다.
  • 입력 개체에 서식 보기가 적용되어야 하는 경우 이러한 cmdlet은 OutputRendering 설정에 따라 서식 출력 문자열에서 이스케이프 시퀀스를 유지하거나 제거합니다.

PowerShell 7.2에 비해 이러한 cmdlet의 호환성이 손상되는 변경입니다.

OutputRendering 은 명령줄에서 실행하고 pwsh 출력을 리디렉션하는 경우와 같이 PowerShell 호스트 프로세스의 출력에 적용되지 않습니다.

다음 예제에서 PowerShell은 Linux에서 bash실행됩니다. cmdlet은 Get-ChildItem ANSI로 데코레이팅된 텍스트를 생성합니다. 프로세스에서 bash 리디렉션이 발생하므로 PowerShell 호스트 외부에서 출력은 OutputRendering의 영향을 받지 않습니다.

pwsh -noprofile -command 'Get-Childitem' > out.txt

콘텐츠를 out.txt 검사하면 ANSI 이스케이프 시퀀스가 표시됩니다.

반면, PowerShell 세션 내에서 리디렉션이 발생하면 OutputRendering 은 리디렉션된 출력에 영향을 줍니다.

pwsh -noprofile -command 'Get-Childitem > out.txt'

내용을 out.txt 검사할 때 ANSI 이스케이프 시퀀스가 없습니다.

ANSI 출력을 사용하지 않도록 설정

TERM 또는 NO_COLOR 환경 변수를 사용하여 ANSI 이스케이프 시퀀스에 대한 지원을 해제할 수 있습니다.

다음과 같이 동작을 변경하는 값 $env:TERM 은 다음과 같습니다.

  • dumb -설정 $Host.UI.SupportsVirtualTerminal = $false
  • xterm-mono -설정 $PSStyle.OutputRendering = PlainText
  • xtermm -설정 $PSStyle.OutputRendering = PlainText

있는 $PSStyle.OutputRendering 경우 $env:NO_COLOR PlainText설정됩니다. NO_COLOR 환경 변수에 대한 자세한 내용은 다음을 참조하세요https://no-color.org/.

C에서 사용 $PSStyle #

C# 개발자는 다음 예제와 같이 싱글톤으로 액세스할 PSStyle 수 있습니다.

string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

PSStyle 는 System.Management.Automation 네임스페이스에 있습니다.

PowerShell 엔진에는 다음과 같은 변경 내용이 포함됩니다.

  • PowerShell 형식 지정 시스템은 다음을 준수 $PSStyle.OutputRendering하도록 업데이트됩니다.
  • ANSI 이 StringDecorated 스케이프된 문자열을 처리하기 위해 형식이 추가됩니다.
  • string IsDecorated 문자열에 문자 시퀀스가 포함되어 있을 C1 CSI 때 true를 반환하기 위해 부울 속성이 ESC 추가되었습니다.
  • 문자열의 속성은 Length ANSI 이스케이프 시퀀스 없이 텍스트의 길이를 반환합니다.
  • 이 메서드는 ANSI 이 StringDecorated Substring(int contentLength) 스케이프 시퀀스에 속하지 않는 콘텐츠 길이까지 인덱스 0에서 시작하는 부분 문자열을 반환합니다. 이는 문자열을 잘라내고 인쇄 가능한 문자 공간을 차지하지 않는 ANSI 이스케이프 시퀀스를 유지하기 위해 테이블 서식을 지정하는 데 필요합니다.
  • 메서드는 string ToString() 동일하게 유지되며 문자열의 일반 텍스트 버전을 반환합니다.
  • 매개 변수가 true이면 메서드는 string ToString(bool Ansi)원시 ANSI 포함 문자열을 Ansi 반환합니다. 아니면, ANSI 이스케이프 시퀀스가 제거된 일반 텍스트 버전이 반환됩니다.
  • 이 메서드는 FormatHyperlink(string text, uri link) 하이퍼링크를 데코레이트하는 데 사용되는 ANSI 이스케이프 시퀀스를 포함하는 문자열을 반환합니다. Windows 터미널 같은 일부 터미널 호스트는 터미널에서 렌더링된 텍스트를 클릭할 수 있도록 만드는 이 태그를 지원합니다.

참고 항목