Когда вы входите в систему, файл ~/.profile
читается оболочкой входа (ksh для вас). Вы можете указать этой оболочке входа в систему заменить себя на bash. Вы должны принять некоторые меры предосторожности:
- Замените оболочку входа только в том случае, если она интерактивная. Это важно: в противном случае вход в систему в графическом режиме может не работать (это зависит от системы: некоторые, но не все системы читают
~/.profile
при входе в систему через xdm или аналогичный), и такие идиомы, как, ssh foo '. ~/.profile; mycommand'
могут быть неудачными.
- Убедитесь, что bash доступен, чтобы вы могли войти в систему, если исполняемый файл по какой-то причине отсутствует.
У вас есть выбор: запускать bash в качестве оболочки для входа или нет. Единственное существенное отличие от создания оболочки для входа - это то, что она загружается ~/.bash_profile
или ~/.profile
. Поэтому, если вы запускаете bash в качестве оболочки входа в систему, будьте очень осторожны, чтобы иметь ~/.bash_profile
или избегать рекурсивного выполнения bash из ~/.profile
. Нет реального преимущества в ~/.profile
выполнении bash, а не в ksh, поэтому я бы рекомендовал не делать этого.
Также установите SHELL
переменную окружения на bash, чтобы такие программы, как эмуляторы терминала, вызывали эту оболочку.
Вот код для переключения на bash. Поместите это в конце ~/.profile
.
case $- in
*i*)
# Interactive session. Try switching to bash.
if [ -z "$BASH" ]; then # do nothing if running under bash already
bash=$(command -v bash)
if [ -x "$bash" ]; then
export SHELL="$bash"
exec "$bash"
fi
fi
esac
Жиль "ТАК - прекрати быть злым"
источник
.profile
работает только для логина (как требуется ОП). Я использую подключение к удаленному рабочему столу Windows 10 для входа на рабочую станцию Linux, затем открываю терминал в gnome. Я хочу, чтобыzsh
мой системный администратор дал мнеbash
. В этом случае я должен добавить фрагмент.bashrc
вместо.profile
.Это немного хитро, но вы можете
bash
использовать оболочку, которую используете при входе в систему, создав.profile
файл в вашем домашнем каталоге, содержащийЭто приведет
ksh
к заменеbash
сеанса сеансом. Вам не придется вводитьexit
(или^D
) дважды, как если бы вы вручную запускали новыйbash
сеанс при каждом входе в систему.даже вернет путь к
bash
.источник
exec bash -l
.type
это рекомендуется в течениеwhich
.bash
Также не будет читать,.profile
таким образом генерируя бесконечный цикл? Я согласен с тем,exec bash
что вам нужно что-то подобное , но вы должны убедиться, что вы делаете это только для своей учетной записи ksh, поэтому требуются некоторые операторы if!~/.bash_profile
или~/.bash_login
В ответе Джайлса должен быть добавлен флаг -l при выполнении bash, чтобы любые скрипты профиля входа в систему были получены из новой оболочки bash. (Например, что-нибудь в /etc/profile.d/ на RHEL). Сценарий должен быть:
источник
-l
опцию? Я использую это в течение нескольких месяцев без каких-либо проблем.Ответом для
csh/tcsh
вдохновленного победителем от @Gilles является:источник
Solaris:
источник