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 Bash básica (a sessão que tenho após inicializar meu sistema operacional).
Como posso 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 sleep
fase de tempo em outra sessão, mas ter a saída de todos os comandos que vêm sob ela na minha sessão.
Obviamente, não posso usar o modo de suspensão na minha sessão base porque isso tornaria a sessão inutilizável ou "sonolenta".
Se você se referir à
tmux
sessão iniciada a partir do script, isso não é verdade.bash
processo que está executando o script vai esperartmux new-session -d bash
sair, depois vai executarsleep 1d
e assim por diante. Avisotmux new-session -d bash
sai quase imediatamente por causa de-d
(o outrobash
dentro da sessão recém-criadatmux
não sai, mas é irrelevante agora).Altere o atraso para
sleep 10
e execute o script. Espere um pouco e você o veráecho
-es para o seu terminal atual . Em seguida, invoquetmux ls
para ver se há uma nova sessão inútil deixada para trás. Você pode anexar a ele e verificar se nada foiecho
adicionado lá.O mesmo acontece com o seu script, durante a execução em primeiro plano. Que tal um trabalho de fundo? Você não precisa
tmux
de nada:Em geral, você pode escrever em outro terminal, desde que tenha as permissões adequadas. O seguinte é o que posso fazer no meu Debian. Digamos que eu queira escrever da sessão B, para que o texto fique visível na
bash
sessão A. Primeiro preciso saber qualstdout
é realmente o dispositivo de A:De dentro do
bash
A isso é mais simples graças ao$$
parâmetro especial:A saída é
/dev/pts/3
no meu caso. Então na sessão B: