
Я пишу функцию 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