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

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

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

  • Какие функции zsh вы используете?
  • Как сохранить историю оболочки из emacs и использовать ее в терминале?
  • Как я могу перейти на предыдущий каталог вместо того, чтобы идти вверх?
  • Каталог программ, перечисленных в bash
  • Что такое команда оболочки для отображения содержимого файла?
  • Есть ли способ использования ctrl-r после ввода части команды в bash?
  •  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)

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

  • Как настроить Linux на работу как сервер RFCOMM SPP?
  • Ошибка установки Simulia Abaqus в Linux (Mint 17.2)
  • Ubuntu grub не запускается, ошибка: вне диска
  • Передача агента SSH не работает
  • Может ли Windows использовать оболочку Linux вместо cmd?
  • Как я могу навсегда восстановить UUID раздела LVM?
  • 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 
    Давайте будем гением компьютера.