tmux 세션에서 기본 세션으로 에코

tmux 세션에서 기본 세션으로 에코

다음 코드가 포함된 스크립트가 있습니다.

#!/bin/bash
tmux new-session -d bash
    sleep 1d
    echo 1 day passed
    tmux kill-session

AFAIU, tmux 세션의 stdout에서는 24시간 후에 에코가 나타나지만 기본 Bash 세션(운영 체제를 부팅한 후의 세션)에서는 나타나지 않습니다.

tmux 세션(물론 기본 Bash 세션보다 한 계층 위임)의 에코가 기본 세션에 인쇄되도록 하려면 어떻게 해야 합니까?

목적은 sleep시간 위상을 활용하는 것입니다.또 다른세션이지만 그 아래에 오는 모든 명령의 출력을 갖습니다.세션.

물론, 세션을 사용할 수 없거나 "졸리게" 만들 수 있으므로 기본 세션에서는 절전 모드를 사용할 수 없습니다.

답변1

에코는 tmux세션의 표준 출력 에 24시간 후에 나타납니다.

tmux스크립트에서 시작한 세션을 참조하면 이는 사실이 아닙니다. bash스크립트를 실행하는 프로세스는 tmux new-session -d bash종료될 때까지 기다린 다음 실행 됩니다 sleep 1d. 알림은 tmux new-session -d bash거의 즉시 종료됩니다 ( 새로 생성된 세션 내의 -d다른 세션은 종료되지 않지만 지금은 관련이 없습니다).bashtmux

지연을 로 변경 sleep 10하고 스크립트를 실행합니다. 잠시 기다리면 echo해당 내용이 표시됩니다.현재의단말기. 다음으로 호출하여 tmux ls쓸모없는 새로운 세션이 남아 있는지 확인하세요. 여기에 연결하여 echo거기에 -ed가 없는지 확인할 수 있습니다.


sleep세션을 사용할 수 없게 되므로 기본 세션에서 사용할 수 없습니다.

포그라운드에서 실행되는 동안 스크립트도 마찬가지입니다. 백그라운드 작업은 어떻습니까? tmux전혀 필요하지 않습니다 .

(sleep 20s; echo surprise) &

일반적으로 당신은~할 수 있다적절한 권한이 있는 경우에만 다른 터미널에 쓰십시오. 다음은 데비안에서 할 수 있는 일입니다. 세션 B에서 글을 쓰고 싶다고 가정하면 텍스트가 세션 A에 표시됩니다 . 먼저 A의 장치가 실제로 bash어떤 장치인지 알아야 합니다 .stdout

readlink /proc/$pid_of_bash_A/fd/1

A 내에서 이것은 특별한 매개변수 bash덕분에 더 간단해졌습니다 :$$

readlink /proc/$$/fd/1

출력은 /dev/pts/3내 경우입니다. 그런 다음 세션 B에서:

echo Hello World! > /dev/pts/3

관련 정보