Ecoe algo de uma sessão tmux para a sessão base

Ecoe algo de uma sessão tmux para a sessão base

Eu tenho um script com este código:

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

AFAIU, o eco aparecerá após 24 horas no stdout da sessão tmux, mas não na minha sessão básica do Bash (a sessão que tenho após inicializar meu sistema operacional).

Como eu poderia ter certeza de que o eco da sessão tmux (que é, obviamente, uma camada acima da minha sessão básica do Bash) seria impresso na minha sessão básica?

O objetivo é utilizar a sleepfase de temponoutrosessão, mas para ter saída de todos os comandos incluídos nelano meusessão.

Claro, não posso usar sleep na minha sessão base porque isso tornaria a sessão inutilizável ou "sonolenta".

Responder1

o eco aparecerá após 24 horas no tmuxstdout da sessão

Se você se referir à tmuxsessão iniciada a partir do script, isso não é verdade. basho processo que executa o script aguardará tmux new-session -d basha saída, então será executado sleep 1de assim por diante. O aviso tmux new-session -d bashsai quase imediatamente por causa de -d(o outro bashdentro da tmuxsessão recém-criada não sai, mas é irrelevante agora).

Altere o atraso para sleep 10e execute o script. Espere um pouco e você verá isso echoem seuatualterminal. Em seguida, invoque tmux lspara ver se há uma nova sessão inútil deixada para trás. Você pode anexar a ele e verificar se nada foi echoeditado lá.


Não posso usar sleepna minha sessão base porque isso tornaria a sessão inutilizável

O mesmo acontece com o seu script, durante a execução em primeiro plano. Que tal um trabalho em segundo plano? Você não precisa tmuxde nada:

(sleep 20s; echo surprise) &

Em geral vocêpodeescreva para outro terminal, se você tiver as permissões adequadas. O seguinte é o que posso fazer no meu Debian. Digamos que eu queira escrever na sessão B, para que o texto fique visível na bashsessão A. Primeiro preciso saber qual stdouté realmente o dispositivo de A:

readlink /proc/$pid_of_bash_A/fd/1

De dentro do bashA isso é mais simples graças ao $$parâmetro especial:

readlink /proc/$$/fd/1

A saída está /dev/pts/3no meu caso. Então na sessão B:

echo Hello World! > /dev/pts/3

informação relacionada