다음 코드가 포함된 스크립트가 있습니다.
#!/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
종료되지 않지만 지금은 관련이 없음).bash
tmux
지연을 으로 변경 sleep 10
하고 스크립트를 실행합니다. 잠시 기다리면 echo
해당 내용이 표시됩니다.현재의단말기. 다음으로 호출하여 tmux ls
쓸모 없는 새 세션이 남아 있는지 확인하세요. 그것에 연결하여 echo
거기에 아무것도 없는지 확인할 수 있습니다.
sleep
세션을 사용할 수 없게 되므로 기본 세션에서 사용할 수 없습니다.
스크립트가 포그라운드에서 실행될 때도 마찬가지입니다. 배경 작업은 어떻습니까? tmux
전혀 필요하지 않습니다 .
(sleep 20s; echo surprise) &
일반적으로 말하면 당신은할 수 있는적절한 권한이 있으면 다른 터미널에 쓸 수 있습니다. 데비안에서 할 수 있는 일은 다음과 같습니다. bash
세션 A에서 텍스트가 표시 되도록 세션 B에서 글을 쓰고 싶다고 가정해 보겠습니다 . 먼저 stdout
A의 실제 장치가 무엇인지 알아야 합니다 .
readlink /proc/$pid_of_bash_A/fd/1
bash
특별한 매개변수 덕분에 $$
A 내부에서는 더 간단해졌습니다 .
readlink /proc/$$/fd/1
출력은 /dev/pts/3
내 경우입니다. 그런 다음 세션 B에서:
echo Hello World! > /dev/pts/3