Вопрос или проблема
Я только что заметил, что моя среда ведет себя непредсказуемо, потому что в какой-то момент этот псевдоним был введен в
/etc/profile.d/vim.sh
:
$ command -v vim
alias vim='__vi_internal_vim_alias'
Просматривая файлы в /etc/profile.d
, они не имеют для меня никакой пользы, так как все, что мне нужно, уже учтено в моем
.bashrc
. В результате Bash начинает работу в
ненужном загрязненном состоянии после входа в систему. Я хотел бы, чтобы Bash
полностью игнорировал этот каталог и просто выполнял .bashrc
.
Тем не менее, как говорится в руководстве, он слепо загружает все
в этом пути перед тем, как продолжить с пользовательскими файлами rc.
Это корпоративная среда, поэтому я не контролирую ОС,
только свою учетную запись.
Существует параметр --noprofile
, но я не могу добавить его
в passwd:
$ chsh
Changing shell for philipp.
New shell [/bin/bash]
> /bin/bash --noprofile
chsh: "/bin/bash --noprofile" does not exist
Через SSH я мог бы вручную добавить bash --noprofile
, но это
становится утомительным, так как у меня десятки, если не сотни SSH
подключений в течение обычного рабочего дня.
Было бы хорошо, если бы я мог просто заставить Bash забыть эти настройки в
начале .bashrc
и затем продолжить с чистой средой.
То, что я хотел бы избежать, — это необходимость играть в «молотком по кротам» с
любыми определениями, которые /etc/profile.d
может добавить на всех
системах, которые я использую.
Я думаю, вам не повезло. chsh
ограничивает оболочки, которые вы можете выбрать, теми, что указаны в
/etc/shells
, и вы не можете указать параметры командной строки.
Единственное, что вы могли бы попробовать, это использовать другие оболочки, перечисленные в /etc/shells
, на случай, если они не читают /etc/profile.d
, но я был бы удивлен, если бы это сработало. Вы также могли бы попробовать unalias -a
в самом начале вашего сценария профиля, чтобы очистить все определенные псевдонимы.
Спасибо за подсказку «Через SSH я мог бы вручную добавить bash –noprofile». Я выяснил, что это можно добавить в локальный файл ~/.ssh/config, что делает его прозрачным, чтобы избежать «вручную … утомительно». Например,
# ~/.ssh/config
host myserver
hostname myserver.domain.com
user myname
# Раскомментируйте, чтобы выбрать, использовать ли входную оболочку или нет.
#RemoteCommand bash --login
#RemoteCommand bash --noprofile
RemoteCommand bash
RequestTTY yes
Дополнительные детали можно найти по адресу https://superuser.com/questions/1224938/ssh-host-is-a-login-shell-but-ssh-host-command-is-not
Ответ или решение
Предотвращение поиска /etc/profile.d
при входе в систему: Решение проблемы с Bash
Введение
Ваша проблема с Bash и нежелательным поведением при входе в систему является распространенной среди пользователей, работающих в корпоративной среде, где администраторы управляют настройками и конфигурациями системы. В данном случае, определение алиаса в файле /etc/profile.d/vim.sh
вызывает нежелательные эффекты, и вы хотите полностью исключить /etc/profile.d
из процесса загрузки Bash. Ниже представлены решения и рекомендации, которые помогут вам справиться с этой ситуацией.
Проблема
При каждом входе в систему Bash автоматически загружает все скрипты в каталоге /etc/profile.d
, а это может приводить к нежелательным настройкам, таким как алиасы. Вы уже упомянули о том, что ваши настройки в ~/.bashrc
совершенно достаточны для вашей работы, и вам не нужны дополнительные настройки из /etc/profile.d
.
Решение
К сожалению, команда chsh
, используемая для смены оболочки, не позволяет вам указать параметры командной строки, такие как --noprofile
. Тем не менее, существуют альтернативные пути, чтобы избежать проблем с настройками, которые вы не контролируете.
1. Использование ~/.ssh/config
Вы уже нашли полезное решение, которое позволяет вам добавлять параметры к команде Bash при подключении по SSH. Ваша конфигурация может выглядеть следующим образом:
# ~/.ssh/config
Host myserver
Hostname myserver.domain.com
User myname
RemoteCommand bash --noprofile
RequestTTY yes
Это решение означает, что при каждом подключении к серверу myserver
будет запущен Bash без загрузки профилей. Таким образом, вы можете избежать потери времени на ручные изменения и каждый раз работать в чистом режиме.
2. Использование unalias
в ~/.bashrc
Если вы уже находитесь в сессии Bash и не можете избежать загрузки /etc/profile.d
, добавьте следующую строку в начало вашего ~/.bashrc
:
unalias -a
Эта команда уберет все алиасы, заданные ранее, и позволит вам начать с чистого состояния. Хотя это решение не полностью решает проблему, оно может сделать вашу сессию более управляемой.
3. Изучение других оболочек
Если остальные решения не подходят, возможно, стоит рассмотреть использование других оболочек, перечисленных в /etc/shells
. Однако, стоит учитывать, что многие из них также могут вести себя аналогичным образом и загружать конфигурации аналогично Bash.
Заключение
Хотя вам не удалось полностью отключить загрузку /etc/profile.d
без использования дополнительных параметров при запуске Bash, предложенные вами решения должны помочь в улучшении вашей рабочей среды. С помощью ~/.ssh/config
, команды unalias
, а также экспериментов с другими оболочками вы сможете добиться нужного поведения в вашей системе.
Если у вас есть дополнительные вопросы или требуют разъяснений, не стесняйтесь обращаться за помощью.