많은 CLI 프로그램은 다른 프로그램으로 파이프하는 대신 콘솔에 인쇄할 때 다른 출력을 생성합니다. 예를 들어, exa
색상이 강조된 파일 목록이 인쇄됩니다. 그러나 exa | less
색깔은 없을 것입니다.
나는 이러한 프로그램이 일반적으로 하나의 입력 또는 다른 입력을 강제하는 매개변수를 가지고 있다는 것을 알고 있으므로 해결책은 이러한 매개변수를 학습하여 파이핑할 때 사용하는 것입니다. 이는 다음과 같은 몇 가지 문제로 인해 보편적인 솔루션이 아닙니다.
- 각 명령에 대한 인수를 배워야 하거나, 무언가를 파이프하려고 할 때 맨페이지를 읽으려면 작업 흐름에서 끊임없이 주의를 분산시켜야 합니다.
- 모든 프로그램이 이러한 매개변수를 제공하는 것은 아닙니다.
- 긴 파이프 목록에 매개변수를 지속적으로 삽입해야 하는 것은 성가신 일입니다. 때로는 전체 체인을 실행하는 데 오랜 시간이 걸리므로 잘못된 출력이 표시되고
--color
다른 작업을 다시 추가하거나 수행하는 것을 잊어버렸다는 사실을 깨닫는 순간에는 몇 분을 낭비한 것입니다.
분명히 프로그램의 설계는 무언가가 파이프되고 있음을 감지하고 다른 출력이 적절하다고 추측하는 것입니다. 이는 많은 경우에 좋고 올바른 동작입니다. 다른 많은 경우에는 프로그램의 추측이 틀렸습니다. 각 프로그램의 고유한 인터페이스를 배우고 추측을 덮어쓰는 것보다 처음부터 프로그램에 파이프되고 있음을 알리지 않음으로써 추측을 미리 방지할 수 있다면 더 효율적인 것 같습니다.
가능합니까? 프로그램이 콘솔에 인쇄하고 파이프 없이 동일한 출력을 생성한다고 생각하게 하면서 출력을 프로그램으로 파이프하는 일반적인 방법은 무엇입니까?
대답이 셸에 따라 달라지면 다음 셸에 관심이 있습니다.
bash
사실상의 표준이기 때문에zsh
bash
보편적으로 호환되는 업그레이드 이기 때문에fish
bash
이는 양립할 수 없는 상황에서 개선을 시도하는 예이기 때문입니다.
기반으로https://askubuntu.com/a/482826isatty
문제는 프로그램을 파이프할 때 이것이 잘못된 것 같습니다 . 따라서 해결책은 어떤 방식으로든 명령을 파이프하는 것이지만 isatty
여전히 사실일 수 있습니다. 하지만 실제로 이것을 달성하는 방법을 모르겠습니다.
답변1
이것이 좋은 해결책인지는 확실하지 않지만 다음을 기반으로합니다.https://stackoverflow.com/questions/4233808/piping-data-to-linux-program-which-expects-a-tty-terminalunbuffer
이는 달성 된 것 같습니다 .
unbuffer exa | less
색상이 표시됩니다.