De acordo com man bash
:
PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
Então você pode usar:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
Além disso:
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist.
Portanto, ~/.bashrc
é fornecido apenas para shells interativos. Às vezes, as pessoas o usam de ~/.bash_profile
ou ~/.profile
, o que é incorreto, pois interfere no comportamento esperado. Se você quiser simplificar a manutenção de código que é comum, você deve usar um arquivo separado para conter o código comum e fornecê-lo independentemente de ambos os arquivos rc.
É melhor se não houver saída para stdout a partir do login rc
arquivos como ~/.bash_profile
ou ~/.profile
, pois isso pode interferir na operação adequada de rsync
, por exemplo.
De qualquer forma, ainda é uma boa ideia testar a interatividade, pois pode haver configuração incorreta.