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

0

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 do tmux, mas não na minha sessão básica do Bash (a sessão que eu tenho após inicializar o sistema operacional).

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

O objetivo é utilizar a sessão sleep time em outra sessão, mas ter saída de todos os comandos que estão sob ela na minha sessão.

É claro que não posso usar o sono na minha sessão de base porque isso tornaria a sessão inutilizável ou "sonolenta".

    
por Arcticooling 01.12.2017 / 05:29

1 resposta

2

the echo will appear after 24 hours in the tmux session's stdout

Se você se referir à sessão tmux que inicia no script, isso não é verdade. bash process executando o script esperará que tmux new-session -d bash seja encerrado, então ele executará sleep 1d e assim por diante. Observe que tmux new-session -d bash sai quase imediatamente devido a -d (o outro bash dentro da recém criada tmux sessão não sai, mas é irrelevante agora).

Altere o atraso para sleep 10 e execute o script. Espere um pouco e você verá echo -es no seu terminal atual . Em seguida, invoque tmux ls para ver que há uma nova sessão inútil deixada para trás. Você pode anexar a ele e verificar se nada foi echo -ed lá.

I can't use sleep in my base session because it would make the session unusable

O seu script também funciona em primeiro plano. Como sobre um trabalho de fundo? Você não precisa de tmux :

(sleep 20s; echo surprise) &

Em geral, você pode escrever em outro terminal, se você tiver permissões apropriadas. O que segue é o que eu posso fazer no meu Debian. Digamos que eu queira escrever a partir da sessão B, então o texto é visível em bash session A. Primeiro eu preciso saber qual dispositivo o stdout de A realmente é:

readlink /proc/$pid_of_bash_A/fd/1

De dentro do bash A, isso é mais simples graças ao parâmetro $$ special:

readlink /proc/$$/fd/1

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

echo Hello World! > /dev/pts/3
    
por 01.12.2017 / 10:37