나는 printf
명령을 사용하고 있습니다세게 때리다Ubuntu의 WSL에서.
이 문서화된 구문을 사용하려고 합니다.
\xHH 16진수 값 HH의 바이트(1~2자리)
이는 printf "\x0A"
(캐리지 리턴) 및 기타 여러 값에 적용됩니다.
printf "\xFF"
그러나 작동하지 않거나 printf "\xFE"
일부 처리를 통해 Utf-16 파일의 내용(BOM은 제외)을 파이핑하기 전에 BOM Utf-16 접두사를 삽입하는 데 사용하고 싶습니다.
이 값(과거 0xF8 포함)에 대해 오류가 발생합니다.
-bash: printf: 쓰기 오류: 입출력 오류
답변1
이것을 원래 복사해 준 @Steeldriver에게 감사드립니다. 나는 그것을 스스로 할 수 없었지만(적어도 처음에는) 당신과 Steeldriver 둘 다 그것을 확인했고, 그 덕분에 좀 더 깊이 파고들 수 있었습니다.
이는 보고서에 보고된 행동의 발현으로 보입니다.이 Github 문제. 이 문제는 특정 WSL 문제가 아니며 이전 Windows 콘솔 호스트에서 문제일 수 있으므로 종료되었습니다.
콘솔 호스트는 최소 20년 이상 된 "오래된" Windows 터미널 인터페이스입니다. 이 문제가 보고되었는지는 모르겠지만 어차피 해결될 가능성은 거의 없습니다.
Windows 콘솔 호스트는 최신 터미널 기능을 갖춘 Microsoft에서 개발한 (상대적으로) 새로운 오픈 소스 터미널인 Windows 터미널로 대체되고 있습니다. 현재 Windows 11에서는 기본 터미널로 실행됩니다. Windows 10에서도 실행됩니다(기본 터미널은 아님).
Windows 터미널에서는 문제가 발생하지 않는 것을 확인했습니다.
WSL2가 출시되기 전에 Github 문제가 발생했기 때문에 Steeldriver가 왜 한 시스템에서만 볼 수 있고 처음에는 볼 수 없었는지 짐작할 수 있었습니다. 흥미롭게도 (적어도 나에게는) 이 질문이오직WSL2가 아닌 WSL1에서 발생합니다. 이는 이를 트리거하는 WSL1의 시스템 호출 변환 인터페이스와 일부 비호환성이 있을 수 있음을 의미합니다. WSL2의 Linux 커널에는 이 문제가 없습니다.
따라서 해결하려면 다음 중 하나를 수행하십시오.
- Windows 터미널(또는 Windows의 콘솔이 아닌 호스트 터미널) 사용
- 또는 WSL2 인스턴스를 사용하세요.
계속 사용할 수 있기 때문에 전자를 선호합니다.둘 다WSL1과 WSL2는 모두 업그레이드된 Windows 터미널 기능을 활용합니다.