Я хочу запустить оболочку bash, (1) выполнить несколько команд, (2) и затем остаться в этой оболочке, чтобы выполнить, как мне нравится. Я могу сделать каждый из них в отдельности:
Запустите команду, используя
-c
флаг:$> bash -c "ls; pwd; <other commands...>"
однако он сразу возвращается в «супер» оболочку после выполнения команд. Я также могу просто запустить интерактивную подоболочку:
Начать новый
bash
процесс:$> bash
и он не выйдет из подоболочки, пока я не скажу об этом явно ... но я не могу выполнить какие-либо начальные команды. Ближайшее решение, которое я нашел, это:
$> bash -c "ls; pwd; <other commands>; exec bash"
который работает, но не так, как я хотел, так как он запускает данные команды в одной подоболочке, а затем открывает отдельную для взаимодействия.
Я хочу сделать это в одной строке. После выхода из подоболочки я должен вернуться к обычной «супер» оболочке без происшествий. Должен быть способ ~~
NB: что я не спрашиваю ...
- не спрашивая, где взять man-страницу bash
- не спрашиваю, как читать команды инициализации из файла ... я знаю, как это сделать, это не решение, которое я ищу
- не заинтересованы в использовании экрана tmux или gnu
- не заинтересованы в предоставлении контекста для этого. Т.е. вопрос должен быть общим, а не для какой-то конкретной цели
- если возможно, я хочу избегать использования обходных путей, которые выполняют то, что я хочу, но «грязным» способом. Я просто хочу сделать это в одной строке. В частности, я не хочу делать что-то вроде
xterm -e 'ls'
exec bash
решение включает в себя две отдельные подоболочки. Я хочу одну сплошную подоболочку.
exec
том, что он заменяет первый подоболочек вторым, поэтому вы оставляете только одну оболочку ниже родительского. Если ваши команды инициализации устанавливают переменные окружения, они будут существовать в исполняемой оболочке.
exec
том, что вы теряете все, что не передается в субоболочки через окружение, такие как неэкспортируемые переменные, функции, псевдонимы, ...
exec bash
решение вам не подходит?