Я повторяю различную статистику машины при входе в систему, но это проблематично для SCP и SFTP, есть ли переменная оболочки, которую я могу проверить?
В bash я использую shopt -q login_shell
чтобы проверить это. Например, в .bashrc:
if shopt -q login_shell
then
echo "interesting stuff"
fi
Это должно уберечь "интересные вещи" от вашего scp / sftp.
Согласно странице руководства, вы должны проверить наличие «i» в $-
.
PS1 установлен, а $ - включает i, если bash является интерактивным, что позволяет сценарию оболочки или файлу запуска проверить это состояние.
Например:
if [[ $- == *i* ]]
then
# do interactive stuff
fi
Исторически сложилось так, что в чисто настроенных оболочках в стиле Борна это «проверка, установлен ли PS1», но это не работает, если какой-нибудь шутник экспортирует PS1 в среду.
Как отмечает Деннис, метод, соответствующий стандартам SUS, состоит в том, чтобы проверить, находится ли 'i' в $ -, хотя [[...]] нестандартен, как и компаратор ==. Итак, наиболее переносимая проверка, соответствующая стандартам:
case $- in
*i*) # do interactive stuff
;;
esac
Тогда у вас есть shopt -q login_shell
для bash (для Cakemox), и оба [[ -o interactive ]]
и [[ -o login ]]
для zsh.