Почему мой .bashrc читается, когда я запускаю неинтерактивные команды по ssh

Я добавил каждый из моих конфигурационных файлов bash ( ~/.bashrc , ~/.bash_profile , ~/.profile ) с echo NAME_OF_FILE , то есть я получаю '.bashrc', когда я источник в ~/.bashrc .

Что меня сбивает с толку, так это то, что я получаю и указываю, что ~ / .bashrc включается, когда я запускаю команду над ssh. Например, если я это сделаю:

  • Http получить из оболочки в Mac OS X
  • Почему пустая строка начинается с «*» в результате команды history в linux?
  • Отличие локального и удаленного доступа в оболочке (связанный с TERM)
  • Узнайте, существует ли имя пользователя
  • Поиск определения функции bash
  • Открытие оболочки Explorer с правами администратора на XP (с установленным IE7)
  •  ssh localhost echo hi 

    я получил

     .bashrc hi 

    Почему в этом контексте получается ~/.bashrc ? Должен ли он НЕ получить источник, поскольку это должно запустить неинтерактивную сессию bash?

    Действительно, ssh localhost tty получает меня «не tty» (которому предшествует «.bashrc», указывающий, что ~/.bashrc получает источники, тем не менее).

    Я хочу, чтобы все мои файлы конфигурации для команд sourcing в ~/.bashrc явно, и нет никаких объяснений.

    (У меня только tty -s && shopt -q login_shell && [[ -r ~/.bashrc ]] && . ~/.bashrc в моем .bash_profile так что я получаю «.bashrc» даже в интерактивных оболочках входа, но это doesn 'T объяснить проблему ssh – я могу прокомментировать это, и я все еще получаю такое же поведение с приведенными выше примерами ssh)

    Как я могу отладить это?

  • Chrome 33 показывает уродливые, блочные, пиксельные шрифты в Linux
  • Прочитайте содержимое zipped-файла без извлечения?
  • Могу ли я сократить свои команды в Ubuntu?
  • Как получить поддержку Java в Google Chrome в Linux?
  • Как я могу проверить, какие порты заняты и какие порты свободны на моей машине Linux?
  • Проблемы с Wi-Fi-соединением решены; Почему мое «исправление» работает?
  • One Solution collect form web for “Почему мой .bashrc читается, когда я запускаю неинтерактивные команды по ssh”

    Из bash страницы bash :

     Bash attempts to determine when it is being run with its standard input connected to aa network con‐nection, as if by the remote shell daemon, usually rshd, or the secure shell daemon sshd. If bash determines it is being run in this fashion, it reads and executes commands from ~/.bashrc, if that file exists and is readable. 

    Т.е. ~/.bashrc будет запускаться, когда вы вызываете его через ssh , независимо от того, есть ли у вас tty или нет.

    Если вы хотите, чтобы ваш .bashrc запускался, когда вы интерактивны, попробуйте это вверху:

     # If not running interactively, don't do anything [[ "$-" != *i* ]] && return 

    Если это не сработает, попробуйте следующее:

     [ -z "$PS1" ] && return 
    Давайте будем гением компьютера.