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
tty
para distinguir entre o login do console e o login do terminal (tty |grep -q ^/dev/tty && echo "is console"
) -
.bash_profile
será 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,
.bashrc
não será lido automaticamente. Você o executa ao fazer o sourcing de dentro de.bash_profile
. - Acredito que você deseja garantir que
script
não seja reentrante. Ou seja, se você estiver em um shell comscript
em execução e criar um sub-shell, não será necessário quescript
seja executado novamente. - O que acontece se você executar
screen
emscript
? -
screen
tem 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?