Eu refleti sobre a resposta do @Thomas Dickey através da "variável guarda" e sua situação. Há algumas coisas complicadas acontecendo aqui e isso depende do seu ambiente.
Se você estiver logado em uma estação de trabalho executando o X windows, quando você efetuar login, o arquivo .bash_profile será lido (normalmente, embora eu não possa dizer com certeza sobre todas as edições do Linux; ele também depende do seu shell de login) . Isso iniciaria sua sessão script , então isso é uma coisa ruim. Além disso, quando você logar em um terminal a partir do X, ele não lerá .bash_profile , mas somente .bashrc , a menos que você diga ao software do terminal para avisar que é um shell de login, caso em que acontece exatamente o oposto.
Então, aqui estão algumas dicas:
- Use $ SHLVL para determinar se você está em uma chamada de "nível superior" do bash, ou possivelmente em uma sessão de login do X, ou possivelmente dentro de um prazo / prompt de comando no X (ou talvez no console!). Você pode usar o comando
ttypara distinguir entre o login do console e o login do terminal (tty |grep -q ^/dev/tty && echo "is console") -
.bash_profileserá lido apenas uma vez porlogin session... normalmente. Você também pode forçar sua leitura chamando bash com-l. - Se for um shell de login,
.bashrcnão será lido automaticamente. Você o executa ao fazer o sourcing de dentro de.bash_profile. - Acredito que você deseja garantir que
scriptnão seja reentrante. Ou seja, se você estiver em um shell comscriptem execução e criar um sub-shell, não será necessário quescriptseja executado novamente. - O que acontece se você executar
screenemscript? -
screentem um recurso de registro que pode ser mais adequado que o script. Então você tem outros problemas como, o que acontece quando você tem várias janelas de terminal abertas? Cada um deles tem uma sessão de tela separada?