Eu uso o Ubuntu 16.04 com o Bash e tenho um arquivo que contém muitas funções diferentes. Entre essas funções, existe essa:
tdm() {
chmod -R a-x,a=rX,u+w "$drt"/phpmyadmin/
sleep 2h
chmod -R 000 "$drt"/phpmyadmin/
tmux kill-session
}
Esta função existe porque depois de instalar o phpmyadmin (PMA), eu restringo por chmod /usr/share/phpmyadmin 000 -R
por motivos de segurança, e a função acima me usa temporariamente para PMA, por 2 horas (2 horas geralmente é mais que suficiente para fazer minhas alterações no banco de dados). Daí o nome TDM (Temporary Database Management).
Note que esta função não tem chamada. Não tem nenhum porque eu chamo diretamente da CLI através da execução de tdm
, depois de obter o arquivo que o contém.
Meu problema
Meu problema é que o comando sleep
dentro da função me impede de usar o console (qualquer mudança de primeiro plano parará sleep
).
Preciso, portanto, que tdm
seja executado em uma sessão tmux
desanexada, lá ele alterará as permissões para 755
/ 644
, sleep
2 horas (sem interromper meu trabalho no console). ele trará o PMA novamente e eliminará a sessão tmux
desanexada.
A única razão pela qual eu uso o tmux
aqui é para que o utilitário sleep
não interrompa a sessão atual com a qual eu trabalho, como descrito acima.
O que eu contemplei até agora
1 - Usando o Bash background ao invés do tmux:
Eu poderia remover a parte tmux
e chamar a função em segundo plano com &
, mas não quero isso; Eu não desejo usar nenhum argumento ao executar a função.
2 - Um arquivo dedicado:
Uma maneira de executar tdm
em uma sessão tmux
desanexada é colocar a sub-rotina em um script em um arquivo dedicado , criando um alias
para esse arquivo e executá-lo diretamente:
1) Crie um arquivo dedicado:
$HOME/tdm.sh
2) Adicione um alias
a "$HOME"/.bashrc
:
alias tdm="tmux new-session -d 'bash $HOME/tdm.sh'"
3) Origem bashrc
:
source "$HOME"/.bashrc
4) use o alias:
tdm
Ainda não quero colocar a função em um script em um arquivo dedicado; Eu quero manter o arquivo atual que contém outras funções.
Minha pergunta
Como eu poderia executar a função dentro do arquivo que contém outras funções, em uma sessão tmux
desanexada?
Atualizar
Uma solução disown
ou nohup
pode ser boa. Contanto que eu execute a função somente com tdm
sem argumentos, então eu não me importo se for feito com disown
, nohup
ou tmux
.