bashrc чи bash_profile?


49

Я знаю різницю між двома сценаріями входу в bash:

.bashrc управляється лише оболонками, що не "входять в систему".

.bash_profile(або .bash_loginабо .profile) виконується "вхідними" оболонками.

Хтось має хороші приклади того, які речі найкраще підходять для виконання лише для входу в систему, таких, що я б тільки вклав їх .bash_profile, але вони насправді не мали б сенсу .bashrc?

(Я знаю , що більшість з нас джерело .bashrcз .bash_profile, так що , здається, не буде особливого сенсу в протилежному питання ...)


Відповіді:


24

Оскільки a .bashrcпризначений для оболонок без входу, я уникаю будь-яких команд, які лунають на екрані. Я також зіткнувся з досвідом, коли виголошення ехо в програмі .bashrcпризведе до відмови команд sftp та rsync (а може бути, і scp-команд).

# Print some information as we log in
# -s: OS Name -n: Node name -r: OS Release
uname -snr
uptime

Крім того, ви зазвичай не запускаєте ssh-агент з неінтерактивної оболонки. Тож у мене це є .bash_profile.

if [ -f ~/.ssh/ssh-agent ]; then . ~/.ssh/ssh-agent; fi

2
Якщо ви використовуєте ~ / .profile замість ~ / .bash_profile, все одно працюватимуть, навіть якщо ви змінюєте оболонки .. ~ / .bash_profile призначений для конкретних речей.
LassePoulsen

1
Але bash запустить лише EITHER .bash_profile АБО .profile, тому якщо ви збираєтесь використовувати обидва, вам потрібно виправити .profile зсередини .bash_profile або щось інше. Це насправді не погана ідея ...
Дон Фолкнер

@Source & @Don: Гарні моменти. У моєму .bash_profile я раніше башимів, але тепер перейшов на щось більш універсальне. Можливо, використання .profile в порядку.
Стефан Ласєвський

Що стосується команд, що виробляють вихід, .bashrcвтручаючись у віддалені методи передачі файлів, реалізовані за допомогою стандартних потоків , рішення полягає в тому, щоб такі команди були під кодом, який перевіряє, чи оболонка є інтерактивною і продовжує лише, якщо вона є. .bashrcФайли за замовчуванням користувачів в Ubuntu, скопійовані з /etc/skel/.bashrcмоменту створення облікового запису, а також у всій системі /etc/bash.bashrcвже містять код, який перевіряє та повертає, якщо оболонка неінтерактивна (хоча все-таки треба покласти під них команди, що виробляють вихід ).
Елія Каган

8

Byobu - чудовий приклад того, що ти ніколи не повинен ставити .bashrc.

В іншому випадку він буде рекурсивно запускати себе у кожному своєму «віртуальному терміналі» ;-)

Ви можете спробувати, хоча це щось на зразок забави.

Ось чому ви його помістили .profile, тому byobu (який насправді є просто обгорткою навколо екрану) завантажується лише один раз під час входу. А сам byobu може розпочати нові інтерактивні сеанси баш.


Це хороший приклад. Дякуємо також за вказівник на Byobu. Тепер для початку спробуйте.
Дон Фолкнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.