Отобразить что-либо из сеанса tmux в базовый сеанс

Отобразить что-либо из сеанса tmux в базовый сеанс

У меня есть скрипт с таким кодом:

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

AFAIU, эхо появится через 24 часа в стандартном выводе сеанса tmux, но не в моем базовом сеансе Bash (сеансе, который у меня есть после загрузки операционной системы).

Как мне убедиться, что эхо из сеанса tmux (который, конечно же, находится на один уровень выше моего базового сеанса Bash) будет выведено в моем базовом сеансе?

Цель состоит в том, чтобы использовать sleepвременную фазув другойсеанс, но и иметь вывод всех команд, входящих в негов моемсессия.

Конечно, я не могу использовать сон в своей базовой сессии, потому что это сделает сессию непригодной для использования или «сонной».

решение1

эхо появится через 24 часа в tmuxstdout сеанса

Если вы ссылаетесь на tmuxсеанс, который вы запускаете из скрипта, то это не так. bashПроцесс, выполняющий скрипт, будет ждать tmux new-session -d bashвыхода, затем он выполнится sleep 1dи т. д. Примечание tmux new-session -d bashзавершается почти немедленно из-за -d(другой bashвнутри вновь созданного tmuxсеанса не завершается, но сейчас это не имеет значения).

Измените задержку на sleep 10и запустите скрипт. Подождите немного и вы увидите его echo-es на свойтекущийтерминал. Затем вызовите tmux ls, чтобы увидеть, что остался новый бесполезный сеанс. Вы можете подключиться к нему и убедиться, что echoтам ничего не было -ed.


Я не могу использовать его sleepв своей базовой сессии, так как это сделает сессию непригодной для использования.

Так же делает ваш скрипт, работая на переднем плане. А как насчет фоновой работы? Вам tmuxвообще не нужно:

(sleep 20s; echo surprise) &

В общем, выможетпишите на другой терминал, если только у вас есть соответствующие разрешения. Вот что я могу сделать в своем Debian. Допустим, я хочу писать из сеанса B, чтобы текст был виден в bashсеансе A. Сначала мне нужно узнать, какое устройство stdoutна самом деле является устройством A:

readlink /proc/$pid_of_bash_A/fd/1

Изнутри bashА это проще благодаря $$специальному параметру:

readlink /proc/$$/fd/1

Вывод /dev/pts/3в моем случае. Затем в сеансе B:

echo Hello World! > /dev/pts/3

Связанный контент