Hacer eco de algo desde una sesión tmux a una sesión base

Hacer eco de algo desde una sesión tmux a una sesión base

Tengo un script con este código:

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

AFAIU, el eco aparecerá después de 24 horas en la salida estándar de la sesión tmux pero no en mi sesión Bash básica (la sesión que tengo después de iniciar mi sistema operativo).

¿Cómo podría asegurarme de que el eco de la sesión tmux (que, por supuesto, está una capa por encima de mi sesión básica de Bash) se imprima en mi sesión básica?

El propósito es utilizar la sleepfase de tiempo.en otrosesión pero para tener salida de todos los comandos que vienen bajo ellaen misesión.

Por supuesto, no puedo usar el modo de suspensión en mi sesión base porque haría que la sesión fuera inutilizable o "adormecida".

Respuesta1

el eco aparecerá después de 24 horas en la tmuxsalida estándar de la sesión

Si se refiere a la tmuxsesión que inicia desde el script, entonces esto no es cierto. bashEl proceso que ejecuta el script esperará tmux new-session -d basha que salga, luego se ejecutará sleep 1dy así sucesivamente. El aviso tmux new-session -d bashsale casi de inmediato debido a -d(el otro bashdentro de la sesión recién creada tmuxno sale pero ahora es irrelevante).

Cambie el retraso sleep 10y ejecute el script. Espera un momento y lo verás echo-es en tuactualTerminal. Luego invoque tmux lspara ver que queda una nueva sesión inútil. Puede adjuntarlo y verificar que no se haya añadido nada echoallí.


No puedo usarlo sleepen mi sesión base porque haría que la sesión fuera inutilizable.

También lo hace su script, mientras se ejecuta en primer plano. ¿Qué tal un trabajo de fondo? No necesitas tmuxnada:

(sleep 20s; echo surprise) &

en general tupoderescriba en otra terminal, si solo tiene los permisos adecuados. Lo siguiente es lo que puedo hacer en mi Debian. Digamos que quiero escribir desde la sesión B, para que el texto sea visible en bashla sesión A. Primero necesito saber qué dispositivo stdoutes realmente el de A:

readlink /proc/$pid_of_bash_A/fd/1

Desde dentro de bashA esto es más sencillo gracias a un $$parámetro especial:

readlink /proc/$$/fd/1

La salida es /dev/pts/3en mi caso. Luego en la sesión B:

echo Hello World! > /dev/pts/3

información relacionada