Как выполнить файл типа "~/.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.shash работает не в интерактивном режиме и завершается, как только "/root/aliases.sh" был выполнен; вот почему сессия SSH заканчивается.

Таким образом, решение состоит в том, чтобы запустить оболочку в интерактивном режиме; от man 1 ash:

Если переменная среды ENV установлена ​​при входе в оболочку или установлена ​​в.profile оболочки входа в систему, оболочка затем считывает команды из файла, названного в ENV. Поэтому пользователь должен помещать команды, которые должны выполняться только во время входа в систему, в файл.profile, а также команды, которые выполняются для каждой оболочки внутри файла ENV.

Так что просто установите ENV в "~/.profile":

export ENV=/root/aliases.sh

и запустить оболочку в интерактивном режиме:

exec /bin/ash

Однако обратите внимание, что:

  1. Бег exec /bin/ash в конце "~ /.profile" заменит любой источник оболочки "~/.profile" (т. е. любую оболочку входа в систему) на ash пример;
  2. Это не имеет никакого смысла. Правильный способ получить ash в качестве оболочки входа для пользователя необходимо изменить оболочку входа для пользователя, что можно сделать с помощью chsh,

Поэтому я действительно предлагаю вам удалить exec /bin/ash из "~ /.profile" и изменить оболочку входа для пользователя, используя chsh вместо.

Другие вопросы по тегам