Как выполнить файл типа "~/.bashrc" для bash for ash?
У меня есть доска с оболочкой по умолчанию sh
, В конце /etc/profile есть:
exec /bin/ash
Это меняет оболочку на ash
,
Что мне делать, если я хочу выполнить файл, в котором я определил некоторые псевдонимы в ash
?
Я пытался с помощью:
exec /bin/ash -f /root/aliases.sh
Но когда я захожу на доску используя ssh
он говорит, что соединение закрыто.
Любым другим путем?
1 ответ
Когда ты бежишь exec /bin/ash -f /root/aliases.sh
ash
работает не в интерактивном режиме и завершается, как только "/root/aliases.sh" был выполнен; вот почему сессия SSH заканчивается.
Таким образом, решение состоит в том, чтобы запустить оболочку в интерактивном режиме; от man 1 ash
:
Если переменная среды ENV установлена при входе в оболочку или установлена в.profile оболочки входа в систему, оболочка затем считывает команды из файла, названного в ENV. Поэтому пользователь должен помещать команды, которые должны выполняться только во время входа в систему, в файл.profile, а также команды, которые выполняются для каждой оболочки внутри файла ENV.
Так что просто установите ENV
в "~/.profile":
export ENV=/root/aliases.sh
и запустить оболочку в интерактивном режиме:
exec /bin/ash
Однако обратите внимание, что:
- Бег
exec /bin/ash
в конце "~ /.profile" заменит любой источник оболочки "~/.profile" (т. е. любую оболочку входа в систему) наash
пример; - Это не имеет никакого смысла. Правильный способ получить
ash
в качестве оболочки входа для пользователя необходимо изменить оболочку входа для пользователя, что можно сделать с помощьюchsh
,
Поэтому я действительно предлагаю вам удалить exec /bin/ash
из "~ /.profile" и изменить оболочку входа для пользователя, используя chsh
вместо.