Спершу зчитується оболонка для входу, /etc/profile
а потім ~/.bash_profile
.
Оболонка без входу в систему зчитується з /etc/bash.bashrc
цього моменту ~/.bashrc
.
Чому це важливо?
Через цей рядок у man ssh
:
Якщо вказана команда , вона виконується на віддаленому хості замість оболонки входу.
Іншими словами, якщо команда ssh має лише параметри (а не команду), наприклад:
ssh user@host
Він запустить оболонку входу, оболонка входу зчитується ~/.bash_profile
.
Команда ssh, яка має таку команду , як:
ssh user@host :
Де команда :
(або нічого не робити).
Він не запустить оболонку входу, тому ~/.bashrc
те, що буде прочитано.
Віддалений стдин
Підключення tty для / dev / stdin на віддаленому комп'ютері може бути фактичним tty або чимось іншим.
Для:
$ ssh sorontar@localhost
/etc/profile sourced
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
$ ls -la /proc/self/fd/0
lrwx------ 1 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3
Що закінчується TTY (не мережевим підключенням), як бачить запущений баш.
Для з'єднання ssh з командою:
$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
Список TTY починається той самий, але зауважте, що / etc / profile не отримувався.
$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
Що говорить оболонці, що з'єднання - це труба (а не мережеве з'єднання).
Отже, в обох тестових випадках оболонка не в змозі знати, що з'єднання є від мережі і тому не читає ~/.bashrc
(якщо говорити лише про з'єднання з мережею). Він читає ~ / .bashrc, але з іншої причини.