tmux 세션에서 기본 세션으로 무언가를 에코합니다.

tmux 세션에서 기본 세션으로 무언가를 에코합니다.

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

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

AFAIU, 에코는 24시간 후에 tmux 세션의 stdout에 나타나지만 기본 Bash 세션(OS 부팅 후 세션)에는 나타나지 않습니다.

tmux 세션(물론 기본 Bash 세션 위에 있는 레이어)의 에코가 기본 세션에서 인쇄되도록 하려면 어떻게 해야 합니까?

sleep목표는 시간 단계 를 활용하는 것입니다.또 다른세션이지만 그 아래의 모든 명령의 출력을 얻으려면회의.

물론 기본 세션에서는 절전 모드를 사용할 수 없습니다. 그렇게 하면 세션을 사용할 수 없거나 "졸음" 상태가 되기 때문입니다.

답변1

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

스크립트에서 시작된 세션을 참조하는 경우에는 tmux그렇지 않습니다. bash스크립트를 실행하는 프로세스는 tmux new-session -d bash종료를 기다린 다음 실행하는 sleep 1d등의 작업을 수행합니다. 알림은 tmux new-session -d bash거의 즉시 종료됩니다(새로 생성된 세션의 다른 하나는 -d종료되지 않지만 지금은 관련이 없음).bashtmux

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


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

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

(sleep 20s; echo surprise) &

일반적으로 말하면 당신은할 수 있는적절한 권한이 있으면 다른 터미널에 쓸 수 있습니다. 데비안에서 할 수 있는 일은 다음과 같습니다. bash세션 A에서 텍스트가 표시 되도록 세션 B에서 글을 쓰고 싶다고 가정해 보겠습니다 . 먼저 stdoutA의 실제 장치가 무엇인지 알아야 합니다 .

readlink /proc/$pid_of_bash_A/fd/1

bash특별한 매개변수 덕분에 $$A 내부에서는 더 간단해졌습니다 .

readlink /proc/$$/fd/1

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

echo Hello World! > /dev/pts/3

관련 정보