Como executar o bash (no script) com o próprio arquivo .bash_logout?

4

Eu quero executar o bash no subshell e quando o usuário sai do subshell, eu quero executar alguns outros comandos (como para salvar logs no arquivo).

Algo parecido com isto:

run.sh:

#!/bin/bash 

function save_information_to_file()
{
    echo "${date} ${time} new bash subshell ended !"
}
# Some commands etc.

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

if [ user_logout_from_subshell ]
then 
     save_information_to_file()
fi;

Executado:

user: ./run.sh
2016-08-12 14:55:13 new bash subshell started...
SubShell: echo "wow..."
wow... 
SubShell: pwd
/home/username
SubShell: cat user.log
2016-08-11 17:54:32 bash started
2016-08-11 17:56:14 bash ended
2016-08-11 18:23:18 bash started
2016-08-11 18:39:30 bash ended
SubShell: exit
exit
2016-08-12 14:59:41 new bash subshell ended !
user:

Como executar o bash com o caminho para o arquivo que deve ser executado na saída?

    
por TMSeth 12.08.2016 / 15:01

4 respostas

3

Meu primeiro pensamento foi .bash_logout também, mas isso só funciona para shells de login. O método mais simples, que funciona tanto para shells de login como de não-login, é configurar um trap na saída. Funciona assim:

armadilha "your_commands_go_here" SAIR

Por exemplo, $ bash $ trap "echo goodbye cruel world!" EXIT $ exit exit goodbye cruel world!

    
por 12.08.2016 / 22:09
4

Você não precisa de nenhum truque especial. Isso é o suficiente:

#!/bin/bash 

env PS1='SubShell:' bash --rcfile /home/username/.bashrc

echo Subshell exited. Now doing something...

O subshell será executado no terminal principal. O script principal irá esperar que ele termine sem nenhum comando extra.

(Eu não sei como você pode definir PS1 acima do shell. Eu acho que ele é sobrescrito na subshell Bash startup.)

    
por 12.08.2016 / 15:10
3

Existe um arquivo no diretório inicial de cada usuário chamado .bash_logout, tente inserir os comandos que você deseja nele.

    
por 12.08.2016 / 15:14
0

Existe a possibilidade de que o .bash_logout ainda não exista no seu diretório pessoal. Eu me deparei com isso no passado. Se este for o caso, apenas vi / vim e crie seu próprio arquivo .bash_logout no seu diretório home e isso deve ser suficiente.

    
por 12.08.2016 / 17:15