No bash, eu uso shopt -q login_shell
para testar isso. Por exemplo, em .bashrc:
if shopt -q login_shell
then
echo "interesting stuff"
fi
Isso deve manter as "coisas interessantes" fora do seu scp / sftp.
Estou ecoando várias estatísticas de máquinas no login, mas isso é problemático para SCP e SFTP, existe uma variável de shell que eu possa testar?
De acordo com a página man, você deve testar a presença de "i" em $-
.
PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
Por exemplo:
if [[ $- == *i* ]]
then
# do interactive stuff
fi
Historicamente, em shells estilo bourne configurados de maneira limpa, é "teste se PS1 está definido", mas isso é quebrado se algum joker exportar PS1 para o ambiente.
O método compatível com os padrões do SUS é testar se 'i' está em $ -, como Dennis observa, embora [[...]] não seja padrão, como é o == comparador. Portanto, a verificação mais compatível com os padrões é:
case $- in
*i*) # do interactive stuff
;;
esac
Então você tem shopt -q login_shell
para o bash (por Cakemox) e ambos [[ -o interactive ]]
e [[ -o login ]]
para zsh.