이렇게 하면 터미널에 연결되어 있지 않은 것으로 감지됩니다. 이는 충분히 공평합니다 ls | less
. ls
그 외에는less
예터미널에 연결하세요. 이 설정에서는 ls
터미널에 대한 컬러 및 열 형식 출력이 생성되고 less
올바르게 처리될 수 있습니다. 을 사용하여 색상이 올바르게 작동하도록 만들 수 있지만 ls --color=force | less -r
더 많은 입력이 필요하고 열이 수행되지 않습니다.
less
실제 터미널처럼 취급하기 위해 연결된 모든 것을 알려주는 스위치가 있다면 멋질 것입니다. 따라서 .NET ls | less -T
에서 컬러 목록과 열 형식 목록을 모두 얻을 수 있습니다 less
.
이런 일을 해 본 적이 있나요?
less
이와 같은 호출기가 실제로 이 작업을 자체적으로 수행할 수 있습니까, 아니면 쉘의 협력이 필요합니까? 예를 들어, 쉘은ls
연결할 의사 터미널을 설정해야 합니까 ?
답변1
파이프라인을 설정하는 쉘입니다. less
관련없는.
이렇게 하면 ls | less
파이프의 쓰기 끝을 실행하는 프로세스의 표준 출력과 동일한 파이프의 읽기 끝을 실행하는 프로세스의 표준 입력을 생성한 후 쉘이 동시에 시작됩니다 ls
.less
ls
less
ls
표준 출력이 tty 장치가 아님을 감지하고 이에 따라 동작을 변경합니다. less
이에 대해 우리가 할 수 있는 일은 아무것도 없습니다.
무엇인가요껍데기수행할 수 있는 작업은 파이프 대신 의사 터미널 쌍을 사용하여 두 프로세스를 연결하는 것입니다. 그러나 의사 터미널은 이를 위해 설계되지 않았기 때문에 이는 좋지 않은 생각입니다. 첫째, 단절은 문제를 야기합니다. less
표준 입력이 의사 터미널 호스트인 경우 혼란스러울 수 있습니다.
ls
또 다른 접근 방식은 의사 터미널 쌍을 통해 출력을 읽고 less
이를 파이프로 연결하는 세 번째 프로세스를 얻는 것입니다.@JdeBP ptyrun
또는ptybandage
, 또는 expect
의 unbuffer
또는 zsh
의 zpty
내장 함수를 사용하여:
zmodload zsh/zpty
ttypager() { (zpty c "stty raw -echo; ${(q)@}"; zpty -r c) | less -RFX; }
ttypager ls
ls
새 터미널의 새 세션에서 실행되므로 ^C를 누르면 SIGINT를 수신하지 못하고 less
쓰기를 마치기 전에 종료하면 SIGPIPE를 수신하지 않습니다. 그러나 이러한 경우 마스터를 보유하는 프로세스(여기서는 서브쉘)는 ls
여전히 SIGHUP을 받고 종료됩니다.
zpty
여기서는 를 사용하는 것처럼 명령을 실행하므로 eval
별칭이 확장됩니다. 실제로 인수를 계속 받고 나중에 별칭 확장을 수행 ttypager \ls
하므로 호출하더라도 확장됩니다 .ttypager
ls
또한 stdout과 stderr 모두 이 의사 터미널로 들어가 결국 파이프로 들어갑니다.
이것은 여전히 더러운 해킹입니다. 여기서 가장 쉬운 방법은 ls
마치 터미널에 연결된 것처럼 동작하도록 지시하는 것입니다.
다음과 같은 도우미 기능을 사용할 수 있습니다.
paged_ls() { ls -C --color=always "$@" | less -RFX; }
여기서 -C
출력을 열로 강제하고( ls
GNU를 포함한 일부 구현에서는 출력이 터미널에 도달할 때 기본적으로 이 작업을 수행함) --color=always
출력이 터미널에 도달하는지 여부에 관계없이 색상으로 출력을 강제합니다.
답변2
이를 수행하는 일반적인 방법은 Bernstein과 같은 도구를 사용하는 것입니다 ptybandage
.
$ptybandage ls > 덜 흔들림;
또는 이 경우에는 Bernstein의 다음이 더 좋습니다 ptyrun
.
$ptyrun ls |
추가 읽기
- https://unix.stackexchange.com/a/249801/5132
- 번스타인, 다니엘(1996).
ptyrun
.DJB웨어. - 번스타인, 다니엘(1996).
ptybandage
.DJB웨어. - 조나단 데보인 폴라드(2014).
ptyrun
.스낵 가이드. 소프트웨어. - 조나단 데보인 폴라드(2014).
ptybandage
.스낵 가이드. 소프트웨어.