Execute um script no login usando ~ / .bash_login


14

Eu preciso executar um script quando eu entrar e sair do meu Ubuntu.

Tentei colocar o script no meu, ~/.bash_loginmas não funcionou.

Existe um local melhor para executar meu script?

Meu script está localizado /home/gsd/script/login.she é executável.

editar:

meu script é executado quando digito: /home/gsd/script/login.she é definido com + x

Agora, eu só tenho: touch /home/gsd/test.txtno ~/.bash_loginteste.

o arquivo test.txt nunca é criado

editar 2:

gsd@laptop:~$ ll ~/.bash*
-rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history
-rw-r--r-- 1 gsd gsd    29 2012-01-25 15:22 .bash_login
-rw-r--r-- 1 gsd gsd   220 2011-11-03 19:22 .bash_logout
-rw-r--r-- 1 gsd gsd  3136 2011-11-04 08:00 .bashrc

.bash_login tem as permissões corretas? o que retorna ls -l .bash_login?
23412 santiagozky

Você também tem um ~/.bash_profile?
enzotib

-rw-r--r-- 1 gsd gsd 313 2012-01-22 11:56 .bash_login
Gino Sullivan

1
chmod +x .bash_login
Zoke 25/01/12

1
Não é necessário chmod +x .bash_login(definir o bit executável em .bash_login). O manual do Bash é um pouco confuso nessa área, mas o Bash não executa eXecute .bash_login como um script de shell. Ele lê o arquivo e depois executa os comandos nele (você pode fazer algo semelhante executando source ~/.bash_login).
Stefan Lasiewski

Respostas:


20

Se .bash_profile existir, o Bash não lerá .bash_login (ou .profile). Esse recurso irritante é descrito em algumas versões do manual do Bash, mas não em todas.

.bash_profilee .bash_loginsão análogos, por isso recomendo que você insira seus comandos .bash_profile, porque é comumente usado e .bash_loginé relativamente desconhecido. Considere também colocar seus comandos em .bashrcvez de .bash_profile. O manual descreve a diferença entre "shell interativo de não login" e "shell de login interativo", portanto, leia esta seção.

O GNU Bash Reference Manual versão 4.1: Arquivos de Inicialização do Bash diz:

procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.

Veja também esta pergunta sobre superusuário e este tutorial do Bash (não se deixe intimidar pelo endereço freeunix.dyndns.org:8088 --- ele ainda é um manual de boa qualidade e eu o uso há anos).

Atualização , pois você diz que não possui um .bash_profile.

Parece que você não está usando o que é chamado de "shell interativo sem login" (consulte o manual do Bash para obter uma descrição detalhada).

Para testar isso, adicione algo como o seguinte cada arquivo: .bashrc, .bash_profilee .bash_login.

echo "DEBUG: I am .bashrc"

echo "DEBUG: I am .bash_profile"

Em seguida, efetue logout e logon novamente. Ao fazer login, aposto que você verá apenas a frase "DEBUG: Eu sou .bashrc", mas não "Eu sou .bash_profile". Nesse caso, significa que você é um "shell interativo sem logon", o que significa simplesmente que o Bash ligará, .bashrcmas não .bash_profile. Para obter informações sobre por que esses dotfiles são do jeito que são, consulte a publicação de @Andrejs Cainikovs abaixo e http://mywiki.wooledge.org/DotFiles


Eu atualizei minha pergunta, não tenho um bash_profile
Gino Sullivan

Ok, porque anteriormente você disse "sim, eu tenho um perfil de bash".
Stefan Lasiewski

Sim, eu tinha-o, em seguida, removido, mas mesmos resultados
Gino Sullivan

3
Esta resposta resolve o problema, acho que vale a pena aceitá-lo.
Marius Butuc

1
Observe também que esses arquivos bash são executados apenas ao fazer login em um shell (por meio do Terminal, ssh, etc.), não ao fazer login na GUI!
Mivk #

5

Os shells de logon, independentemente de serem interativos ou não interativos, leem e executam o.profile

Os shells interativos leem e executam .bashrc.

Frequentemente, você verá essas /etc/profilefontes .bashrc- portanto, todas as configurações feitas .bashrctambém terão efeito em um shell de login, independentemente de serem interativas ou não interativas.

A ordem de execução dos scripts de inicialização para um shell depende se o shell é interativo ou não interativo e não está relacionado ao fato de ser um script de logon ou não.

Quando o bash é chamado como um shell de login interativo, ele lê e executa comandos a partir do /etc/profile. Em seguida, o Bash tentará executar SOMENTE o primeiro arquivo existente e é legível do seguinte:

  1. .bash_profile
  2. .bash_login
  3. .profile

Se um desses arquivos for encontrado, mas não puder ser lido, ele causará um erro. Não há erro se houver algum NÃO encontrados.

Esse mesmo processo é seguido quando um shell de logon não interativo é chamado com a --loginopção


1
AFAIK, o .profilearquivo é lido e executado apenas quando o usuário efetua login usando a interface gráfica. Caso contrário, não é lido.
RajaRaviVarma

@RajaRaviVarma Acabei de testar (Ubuntu 16.04) e ~/.profiledefinitivamente é lido em shells de login não gráficos (testei alternando para outro terminal via Ctrl+Alt+F2e fazendo login lá).
21317 waldyrious

Concordo com @RajaRaviVarma - Eu estou entrando em um Ubuntu 16.04 VM através de SSH e .profilenão é lido, única.bashrc
jamesc

0

Verifique se o script que você deseja executar é executável. Corra chmod +x scriptnamepara fazer isso. Verifique também se o script começa com o shebang correto ( #!/bin/bashpara scripts de shell). Por fim, use todos os caminhos completos ao executá-lo, por exemplo, em /usr/bin/echovez de echoapenas envolver o ambiente em que seu script será executado não é idêntico ao que você está acostumado.


0

O Bash só procura .bash_loginou .profilearquivos se for executado como shell de logon interativo. Quando é executado como um shell interativo sem login, ele é lido .bashrc.
Geralmente é o segundo caso, ou seja, quando você executa o gnome-terminalbash, ele é executado como um shell que não é de login.

Isso indica claramente que, se você estiver inicializando no Gnome, .bash_loginnão será executado. Mas se você abaixar o nível de execução para inicializar diretamente no bash, o mesmo arquivo será executado após o login bem-sucedido.
Suponho .bash_loginque será executado também no caso de conexões SSH remotas.

Parcialmente rasgado daqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.