
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 sleep
fase 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
tmux
salida estándar de la sesión
Si se refiere a la tmux
sesión que inicia desde el script, entonces esto no es cierto. bash
El proceso que ejecuta el script esperará tmux new-session -d bash
a que salga, luego se ejecutará sleep 1d
y así sucesivamente. El aviso tmux new-session -d bash
sale casi de inmediato debido a -d
(el otro bash
dentro de la sesión recién creada tmux
no sale pero ahora es irrelevante).
Cambie el retraso sleep 10
y ejecute el script. Espera un momento y lo verás echo
-es en tuactualTerminal. Luego invoque tmux ls
para ver que queda una nueva sesión inútil. Puede adjuntarlo y verificar que no se haya añadido nada echo
allí.
No puedo usarlo
sleep
en 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 tmux
nada:
(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 bash
la sesión A. Primero necesito saber qué dispositivo stdout
es realmente el de A:
readlink /proc/$pid_of_bash_A/fd/1
Desde dentro de bash
A esto es más sencillo gracias a un $$
parámetro especial:
readlink /proc/$$/fd/1
La salida es /dev/pts/3
en mi caso. Luego en la sesión B:
echo Hello World! > /dev/pts/3