tmux와 같은 여러 터미널 창을 생성하는 스크립트를 작성하는 방법은 무엇입니까?

tmux와 같은 여러 터미널 창을 생성하는 스크립트를 작성하는 방법은 무엇입니까?

tmux또는 와 같이 단일 창에서 여러 터미널 창을 열 수 있는 스크립트를 작성하고 싶습니다 screen.

저는 개인적으로 이 분야에 매우 능숙 tmux하고 수년 동안 사용해 왔지만 우리 팀의 다른 개발자들은 이 분야나 다른 스크린 멀티플렉서에 대해 아무것도 알고 싶어하지 않습니다.

이를 위해 단일 창의 여러 창에서 자체적으로 분리될 수 있는 스크립트를 작성하고 싶습니다. bash를 통해 직접 달성할 수 있나요?

내 목표는

  • node설치가 필요하거나 설치가 필요한 항목은 피하세요 (예:기여에 대한 축복) 프로세스를 최대한 간단하게 만듭니다.
  • 대부분의 배포판에 사전 설치되어 있고 posix와 호환되는 것을 사용하여 작성하세요.
  • 여러 창으로 나누어진 터미널 창이 있으며, 각 창은 실행 중인 프로세스 또는 명령 프롬프트가 될 수 있습니다.
  • 누군가 클릭하면 ctrl+c모든 창을 종료하고 단일 터미널로 돌아갑니다.

답변1

나는 이것이 bash만으로는 이루어질 수 없다고 말하는 것이 안전하다고 생각합니다. 더 높은 수준의 프로그래밍 언어(예: Perl/Python)가 필요하거나 스크립트를 사용하여 tmux 인스턴스를 제어해야 합니다.

관련된 기술에 대한 간략한 검토는 다음과 같습니다.

  • 원하는 터미널 환경에서 프로그램을 실행하려면의사 터미널(pty)그것을 호스팅합니다.
  • pty는 시스템 호출을 사용하여 생성되고 제어됩니다.I/W 제어, 상당히 낮은 수준의 API를 가지고 있습니다.
  • tmux와 같은 작업을 수행하려면 각 pty의 제어 끝을 지속적으로 읽어야 하며 그런 다음 특별한 방법을 사용하여 이러한 조각을 기본 프로그램의 터미널에 연결해야 합니다.터미널 이스케이프 코드
  • 터미널 기능에는 수백 가지 변형이 있습니다(예: 커서 위치 지정 및 굵게/색상/밑줄 등을 위해 터미널에서 지원하는 이스케이프 시퀀스). 따라서 어떤 종류의 호환성을 원할 경우 유사한 라이브러리를 사용해야 합니다.저주하위 창을 설정하는 데 도움이 됩니다.

Bash를 허용하는 도구가 있습니다ioctl 호출그러나 나는 그것이 pty 할당에 필요한 모든 호출을 처리할 수 있다고 생각하지 않으며 어떤 의미에서도 표준 도구가 아닙니다.

다음 방법으로 이 문제를 해결할 수 있습니다.수동으로 pty 장치 노드 만들기하지만 루트로 실행해야 하므로 혼란스러울 수 있습니다.

bash는 명령에서 다양한 터미널 이스케이프 시퀀스를 알아낼 수 tput있으며 실제로 텍스트 창을 렌더링하는 bash 스크립트를 작성할 수 있지만 ncurses가 없으면 크로스 플랫폼에서 올바르게 수행하기 어렵고 시간이 많이 걸립니다.

간단히 말해서, 일반적인 bash 및 posix 도구를 사용하면 이 작업을 수행할 수 없다고 생각합니다.

Perl은 거의 모든 UNIX에 설치되어 있고 Perl을 ioctl호출할 수 있으므로 별도의 모듈을 설치하지 않고도 Perl로 작성하는 것이 가능할 것입니다. 그러나 최소한 추가 도우미 모듈(예:IO::Pty그리고저주. 하지만 그럼에도 불구하고 아직 해야 할 일이 많습니다.

내 생각에 가장 좋은 방법은 시도해 보는 것이다.스크립트 먹스. 이전에 이 작업을 해본 적이 없지만 그 게시물은 몇 주와 많은 학습이 아닌 며칠의 프로젝트처럼 보입니다.

주된 반대 의견이 tmux를 설치해야 한다는 것이라면, tmux의 정적 바이너리를 다운로드하고 컴파일한 다음 스크립트와 함께 배포해 볼 수 있습니다. 정적 바이너리는 시스템의 모든 라이브러리에 대한 종속성을 피하고 올바른 아키텍처를 갖춘 최신 Linux 커널에서 실행되어야 합니다. 여러 아키텍처에 대한 바이너리를 컴파일하고 스크립트가 사용할 바이너리를 감지하도록 할 수도 있습니다.

관련 정보