как я могу использовать bash в качестве моей оболочки входа, когда мой системный администратор отказывается позволить мне изменить его

Системный администратор unix, где я работаю, неохотно дает мне доступ к изменению моей оболочки входа из ksh в bash . Он дал различные оправдания, самое смешное, что, поскольку они пишут все свои сценарии для ksh они не будут работать, если я попытаюсь их запустить. Я не знаю, где он получает эти идеи, но поскольку я не могу его убедить, есть ли у меня какая-то альтернатива?

( chsh установлен на этих машинах, но мы используем общедоступные / частные keypairs для входа в систему, и у меня нет пароля, поэтому, когда chsh запрашивает у меня пароль, мне нечего дать.)

Когда вы входите в систему, файл ~/.profile считывается оболочкой входа (ksh для вас). Вы можете указать, что оболочка для входа заменяет себя bash. Вы должны принять некоторые меры предосторожности:

  • Только замените оболочку входа, если она интерактивна. Это важно: в противном случае вход в графический режим может не работать (это зависит от системы: некоторые, но не все системы читают ~/.profile при входе через xdm или аналогичные) и идиомы, такие как ssh foo '. ~/.profile; mycommand' ssh foo '. ~/.profile; mycommand' ssh foo '. ~/.profile; mycommand' не удастся.
  • Убедитесь, что bash доступен, поэтому вы можете войти в систему, если по какой-либо причине исполняемого файла нет.

У вас есть выбор: запускать bash в качестве оболочки входа или нет. Единственное существенное отличие в создании оболочки входа – это загрузка ~/.bash_profile или ~/.profile . Поэтому, если вы запустите bash в качестве оболочки входа в систему, будьте очень осторожны, чтобы иметь файл ~/.bash_profile или ~/.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 

Это немного kludgey, но вы можете заставить bash быть оболочкой, которую вы используете при входе в систему, создав файл .profile в вашем домашнем каталоге, содержащий

 SHELL=`type -P bash` exec bash -l 

Это приведет к замене сеанса ksh сеанс bash . Вам не придется дважды вводить exit (или ^D ), как если бы вы вручную запускали новый сеанс bash каждый раз при входе в систему.

 echo $SHELL 

даже вернет путь к bash .

В ответ Giles должен быть добавлен флаг -l при выполнении bash, так что любые скрипты профиля входа будут получены в новой оболочке bash. (Например, что-либо в файле /etc/profile.d/ на RHEL). Затем скрипт должен быть:

 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" -l fi fi esac 

Solaris:

 usermod -s /bin/bash root