Назад | Перейти на главную страницу

Проверьте, является ли вход в систему через scp-соединение

Я повторяю различную статистику машины при входе в систему, но это проблематично для 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.