추가 읽기

추가 읽기

내가 실행하고 싶은 프로그램이 있는데, 내 터미널에 실제보다 적은 수의 열이 있다고 믿도록 속이는 것입니다. 이렇게 하면 필요한 기본 잘림이 가능해지기 때문입니다.

resize제안 대로 xterm시도 해봤는데아스쿠벤투에서그러나 xterm에서만 제대로 작동하며 스크립트 작성이 어렵습니다. 출력을 얻으려면 스크립트에서 사용할 수 있는 것이 필요합니다.임무 전사주문하다.

불행하게도 다른 값을 내보내도 COLUMNS아무 것도 바뀌지 않는 것 같습니다.

답변1

커뮤니티의 대답은 올바른 방향으로 가고 있습니다.

tmux원하는 형상(특정 행 수를 가정할 때 열 너비)으로 분리된 세션을 생성 할 수 있습니다 .

tmux new-session -d -s task-session -x WIDTH -y HEIGHT

그런 다음 명령을 실행하십시오.

tmux send-keys 'task' ENTER

명령 출력을 파일로 파이프하지 마십시오.

창을 tmux파일로 덤프합니다.

tmux capture-pane -b temp-buffer -S -
tmux save-buffer -b temp-buffer output.txt
tmux delete-buffer -b temp-buffer 

인용하다

답변2

실제로 POSIX 표준에서는 환경 변수의 값이 COLUMNS터미널 크기를 얻는 다른 방법보다 우선한다는 것입니다. 표준에서는 변수의 용도 중 하나를 "터미널이나 창보다 임의로 작은 영역에 데이터를 표시"하는 것으로 설명합니다.

이러한 다른 방법은 표준화되지 않았지만 일반적으로 최종 장치에 대한 파일 설명자를 엽니다 ioctl(). 귀하의 프로그램은 표준 출력을 확인하지 않고 터미널 장치로 TIOCGWINSZ가정하지만 이를 수행합니다 .isatty()

불행히도 일부 프로그램은 COLUMNS환경 변수를 존중하지 않으며 귀하의 프로그램도 그 중 하나입니다. 대신, 자체적인 특별한 비표준 메커니즘, 즉 detection구성 파일의 설정을 제공합니다.defaultwidth

더 슬픈 것은 이러한 작업이 환경 변수와 반대라는 것입니다 COLUMNS. 그것들은 대안이 아니라 대체물입니다. detection프로그램 사용을 중단 TIOCGWINSZ하고 기본 상태로 돌아가려면 프로그램을 닫아야 합니다 . 그런 다음 defaultwidth감지를 강제로 끄려면 값을 설정해야 합니다 . 설정되지 않은 경우 80, 0인 경우 65536입니다.

더욱 아쉬운 점은 detectionPOSIX 표준 COLUMNSLINES변수가 서로 독립적으로 동작하는 것과 달리 너비와 높이 모두에 닫힘이 적용된다는 점이다. 따라서 defaultheight강제 종료를 감지하려면 설정되지 않은 경우 24, 0인 경우 65536인 a도 살펴봐야 합니다 .

할 수 있다, 또는 탐지를 종료하고 의사 터미널로 프로그램을 속이십시오. tmux모든 키 패딩과 중간 파일이 필요한 복잡한 방법입니다. Bernstein ptybandagestty columns(내부 의사 터미널의 경우)을 사용하는 것이 한 줄로 더 간단하며 프로그램이 실행되는 동안 실시간으로 표준 출력으로 출력됩니다.

ptybandage sh -c 'stty 열 40';

추가 읽기

  • 번스타인, 다니엘(1996).ptybandage.DJB웨어.
  • 조나단 데보인 폴라드(2014).ptybandage.스낵 가이드. 소프트웨어.

답변3

다음은 아직 작동하지 않지만 약간의 수정을 통해 작동하게 할 수 있을 것 같습니다. 다음 명령은 taskwarrior를 실행하기 전에 새로운 tmux 세션을 생성하고 창 크기를 수정합니다.

tmux new -d -s s1
tmux split -v
tmux resize-pane -t s1 -y 5
tmux send-keys "task > output.txt" ENTER
sleep 1
tmux kill-session -t s1
cat output.txt

관련 정보