프로그램이 파이프되고 있지 않다고 생각하도록 속이는 일반적인 방법은 무엇입니까?

프로그램이 파이프되고 있지 않다고 생각하도록 속이는 일반적인 방법은 무엇입니까?

많은 CLI 프로그램은 다른 프로그램으로 파이프하는 대신 콘솔에 인쇄할 때 다른 출력을 생성합니다. 예를 들어, exa색상이 강조된 파일 목록이 인쇄됩니다. 그러나 exa | less색깔은 없을 것입니다.

나는 이러한 프로그램이 일반적으로 하나의 입력 또는 다른 입력을 강제하는 매개변수를 가지고 있다는 것을 알고 있으므로 해결책은 이러한 매개변수를 학습하여 파이핑할 때 사용하는 것입니다. 이는 다음과 같은 몇 가지 문제로 인해 보편적인 솔루션이 아닙니다.

  • 각 명령에 대한 인수를 배워야 하거나, 무언가를 파이프하려고 할 때 맨페이지를 읽으려면 작업 흐름에서 끊임없이 주의를 분산시켜야 합니다.
  • 모든 프로그램이 이러한 매개변수를 제공하는 것은 아닙니다.
  • 긴 파이프 목록에 매개변수를 지속적으로 삽입해야 하는 것은 성가신 일입니다. 때로는 전체 체인을 실행하는 데 오랜 시간이 걸리므로 잘못된 출력이 표시되고 --color다른 작업을 다시 추가하거나 수행하는 것을 잊어버렸다는 사실을 깨닫는 순간에는 몇 분을 낭비한 것입니다.

분명히 프로그램의 설계는 무언가가 파이프되고 있음을 감지하고 다른 출력이 적절하다고 추측하는 것입니다. 이는 많은 경우에 좋고 올바른 동작입니다. 다른 많은 경우에는 프로그램의 추측이 틀렸습니다. 각 프로그램의 고유한 인터페이스를 배우고 추측을 덮어쓰는 것보다 처음부터 프로그램에 파이프되고 있음을 알리지 않음으로써 추측을 미리 방지할 수 있다면 더 효율적인 것 같습니다.

가능합니까? 프로그램이 콘솔에 인쇄하고 파이프 없이 동일한 출력을 생성한다고 생각하게 하면서 출력을 프로그램으로 파이프하는 일반적인 방법은 무엇입니까?


대답이 셸에 따라 달라지면 다음 셸에 관심이 있습니다.

  • bash사실상의 표준이기 때문에
  • zshbash보편적으로 호환되는 업그레이드 이기 때문에
  • fishbash이는 양립할 수 없는 상황에서 개선을 시도하는 예이기 때문입니다.

기반으로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색상이 표시됩니다.

관련 정보