
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 sleep
fase 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
tmux
stdout da sessão
Se você se referir à tmux
sessão iniciada a partir do script, isso não é verdade. bash
o processo que executa o script aguardará tmux new-session -d bash
a saída, então será executado sleep 1d
e assim por diante. O aviso tmux new-session -d bash
sai quase imediatamente por causa de -d
(o outro bash
dentro da tmux
sessão recém-criada não sai, mas é irrelevante agora).
Altere o atraso para sleep 10
e execute o script. Espere um pouco e você verá isso echo
em seuatualterminal. Em seguida, invoque tmux ls
para ver se há uma nova sessão inútil deixada para trás. Você pode anexar a ele e verificar se nada foi echo
editado lá.
Não posso usar
sleep
na 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 tmux
de 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 bash
sessão A. Primeiro preciso saber qual stdout
é realmente o dispositivo de A:
readlink /proc/$pid_of_bash_A/fd/1
De dentro do bash
A isso é mais simples graças ao $$
parâmetro especial:
readlink /proc/$$/fd/1
A saída está /dev/pts/3
no meu caso. Então na sessão B:
echo Hello World! > /dev/pts/3