Как запустить команды bash и оставить командную строку открытой?

Как запустить команды bash и оставить командную строку открытой?

Я пишу функцию bash, которая будет запускать некоторые команды для настройки среды, а затем оставлять пользователя в командной строке.

Я могу бегать

bash -c 'ls'

Для выполнения lsв bash.

Я тоже могу сделать

bash -c 'ls ; exec bash'

Чтобы выполнить ls, оставьте командную строку bash открытой.

Однако я хочу получить файл и настроить некоторые псевдонимы, функции и переменные среды, а затем оставить приглашение открытым, поэтому что-то вроде этого:

 bash -c 'source env.sh ; exec bash'

.bashrcКонечно, это не работает, поскольку подоболочки не наследуют псевдонимы или функции. Есть ли способ обойти эту проблему? Я бы предпочел все равно иметь источник пользователя и не использовать эту --init-fileопцию.

решение1

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

$ cat env.sh
. ~/.bashrc
export SOMEVAR="value"
somespecialfunction() {
  printf '%s\n' "I'm so cool"
}
$ bash --init-file env.sh

Связанный контент